2016-07-17 6 views
3

При использовании Autotools это общее для создания config.h файла, указав AC_CONFIG_HEADERS макрос в configure.ac, как это:CMake генерирует config.h как из Autoconf

AC_CONFIG_HEADERS([config.h]) 

Что такое соответствующий эквивалент этого при использовании CMake?

+1

См [конкретных] (https://cmake.org/cmake/help/v3.0/command/configure_file.html) и [общий] (HTTP: // WWW. vtk.org/Wiki/CMake:How_To_Write_Platform_Checks). –

+1

Возможный дубликат [CMake: как проверить файлы заголовков и библиотечные функции, например, в Autotools?) (Http://stackoverflow.com/questions/647892/cmake-how-to-check-header-files-and-library-functions -как-в-Autotools) – usr1234567

ответ

7

Вам необходимо создать файл, похожий на config.h.in. Что-то вроде

#cmakedefine HAVE_FEATURE_A @[email protected] 
#cmakedefine HAVE_FEATURE_B @[email protected] 
#cmakedefine HAVE_FEATURE_BITS @[email protected] 

Тогда вы должны объявить переменные Feature_A_FOUND, Feature_B_FOUND, B_BITSIZE в коде CMake и вызвать

configure_file(config.h.in config.h) 

, который приведет к config.h файл, похожий на один из Autotools , Если переменная не найдена или установлена ​​в false, строка будет прокомментирована. В противном случае значение будет вставлено. Предположим, Feature_A_FOUND=A-NOTFOUND ¸ Feature_B_FOUND=/usr/lib/b, B_BITSIZE=64, что приведет к

/* #undef HAVE_FEATURE_A @[email protected] */ 
#define HAVE_FEATURE_B /usr/lib/b 
#define HAVE_FEATURE_BITS 64 

Возможно HAVE_FEATURE_B лучше было бы определить как #cmakedefine01, что приводит к 0 или 1 в зависимости от значения переменной.

В общем случае можно создать каждый файл config.h, созданный Autotools, поскольку CMake более гибкий. Но это требует больше работы, и вы не можете автоматически получить config.h, но вы должны сами написать .in-файл.

Документация: https://cmake.org/cmake/help/v3.6/command/configure_file.html

 Смежные вопросы

  • Нет связанных вопросов^_^