Macで argp.h がないと言われたら
MacOSで、C/C++で書かれたLinux向けのツールをコンパイルしていたら、
fatal error: 'argp.h' file not found
#include <argp.h>
^~~~~~~~
1 error generated.
こんな感じのエラーが出現した。
これは、コマンドライン引数を解析するライブラリの、argp.h がないことを意味する。
解決策
実は、homebrewでインストールすることができる。
brew install argp-standalone
インストールしたら、ファイルを確認してみよう。
brew ls argp-standalone
/opt/homebrew/Cellar/argp-standalone/1.3/include/argp.h
/opt/homebrew/Cellar/argp-standalone/1.3/lib/libargp.a
/opt/homebrew/Cellar/argp-standalone/1.3/sbom.spdx.json
特に .pc
ファイルなどはないので、pkg-config
などは使う事ができない。
そこで、直接パスを指定する。
cc hoge.c \
-largp \
-L /opt/homebrew/Cellar/argp-standalone/1.3/lib/ \
-I /opt/homebrew/Cellar/argp-standalone/1.3/include/ \
-o hoge
上記のコマンドが実際に動作することを確認するために、ChatGPTに argp.h
を利用した簡単なコードを書いてもらって実際にコンパイルできることを確かめた。この記事は以上です。
#include <stdio.h>
#include <argp.h>
static struct argp_option options[] = {
{"name", 'n', "NAME", 0, "Name to display"},
{0}
};
struct arguments {
char *name;
};
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
struct arguments *arguments = state->input;
switch (key) {
case 'n':
arguments->name = arg;
break;
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}
static struct argp argp = {options, parse_opt, 0, 0};
int main(int argc, char **argv) {
struct arguments arguments;
arguments.name = "";
argp_parse(&argp, argc, argv, 0, 0, &arguments);
printf("Name: %s\n", arguments.name);
return 0;
}