2016-07-20 3 views
-1

Я кодирую в C с помощью CMake, и я хотел бы определить макросы препроцессора sobre в отдельном файле. Цель этого - иметь основной файл конфигурации для моих приложений.Определить макросы препроцессора в файле .config

Я занимался чем-то похожим на файлы ядра .config, но я не нашел, как передать файл с определениями в компилятор. Я знаю вариант -D gcc для определения одного макроса, но он не принимает файлы как imput. Я также знаю утилиту ADD_DEFINITIONS от CMake, но ее использование, но также предполагается использовать с определенным количеством макросов, а не с файлом.

Подводя итог, я хотел бы задать файл .config с макроопределениями:

CONFIG_MACRO_A=y 
CONFIG_MACRO_B=y 
# CONFIG_MACRO_C is not set 
CONFIG_MACRO_C=y 

и использовать каждую строку в качестве макроса препроцессора во время компиляции.

Большое вам спасибо за помощь.

+2

Вы можете использовать 'config_file'. Проверьте http://stackoverflow.com/questions/38419876/cmake-generate-config-h-like-from-autoconf/38423317#38423317 и http://stackoverflow.com/questions/647892/cmake-how-to-check -header-files-and-library-functions-like-in-autotools – usr1234567

ответ

0

Я вижу, по крайней мере, три возможности:

  1. Написать свой конфигурационный файл в стиле обычного файла заголовка и включить его, т.е.

    #define CONFIG_MACRO_A y 
    #define CONFIG_MACRO_B y 
    //#define CONFIG_MACRO_C# C is not set 
    #define CONFIG_MACRO_D y 
    
  2. Используйте механизм конфигурационного файла, как @ Предлагается usr1234567.

  3. Использование обработки оболочки в вызове вашего компилятора (то есть в makefile), например. для Баша:

    gcc $(CFLAGS) `while read mac; do echo -n "-D$mac "; done < <(grep -v "#" mymacro) ` $(TARGET) 
    
+0

Спасибо! Для моего варианта использования третий вариант сделает трюк. Основная цель заключалась в том, чтобы сделать файл конфигурации «удобочитаемым», поэтому я хотел избежать использования #define или #cmakedefine. –