autoconf дает вам config.h
, который предоставляет строковые макросы, такие как PACKAGE
, PACKAGE_NAME
, PACKAGE_STRING
, PACKAGE_VERSION
и VERSION
.
(Когда я использую парсер аргументов Argp , я просто использую
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <argp.h>
const char *argp_program_version = PACKAGE_STRING;
const char *argp_program_bug_address = PACKAGE_BUGREPORT;
/* et cetera */
int main(int argc, char **argv) {
error_t argp_result = argp_parse(&argp, argc, argv, 0, 0, NULL);
if (argp_result) return argp_result;
/* et cetera */
}
, а затем --help
, --version
и т. Д. Просто автоматически работают.)
Вы также можете добавить
AC_CANONICAL_HOST
AC_DEFINE_UNQUOTED([CHOST], ["$host"], [Canonical host])
AC_CANONICAL_BUILD
AC_DEFINE_UNQUOTED([CBUILD], ["$build"], [Canonical build])
AC_CANONICAL_TARGET
AC_DEFINE_UNQUOTED([CTARGET], ["$target"], [Canonical target])
к вашему configure.ac
, если вы хотите, чтобы эти строковые макросы также были в вашем config.h
. Обычно это строки вида $arch-$vendor-$kernel-$libc
, где
CHOST
- это платформа, которая будет запускать программное обеспечение после его сборки,
CBUILD
является платформой, которая в настоящее время создает программное обеспечение, а
CTARGET
- платформа, на которой будет работать программное обеспечение.
(Это все одно и то же, если вы не выполняете кросс-компиляцию или не создаете кросс-компиляцию инструментария.)