В общем, юзаю CMake для одного проекта на С.Проект модульный с кучей различных параметров конфигурации времени компиляции и рантайм конфигурации.Проблема в следующем:У меня есть файл config.h где указаны дефайны какие модули собирать и какие нет, типа:/ This parameter enables building FOO module /#define FOO_ENABLEСоответственно в коде который собирается использовать этот модуль стоят проверки на этот дефайн и если пользак попробует запустить программу с указав этот модуль в програмной строке типа:./prog --use=fooТо ему выскочет ошибка что такой модуль не включен во время билда и т.п.Все вроде бы хорошо, но этот модуль все равно будет билдится CMake'ом, т.к указан в add_library(foo MODULE foo.c) и т.п.И он будет билдится до тех пор пока либо не укажаешь в add_library EXCLUDE_FORM_ALL, но тогда каждый модуль придется билдить отдельно набирая ручками make foo что неприемлимо, либо писать в CMakeLists что-то типаif(FOO_ENABLED)add_library(foo ...)endif()И этот способ заебись, только вот проблема в том, что FOO_ENABLED указан в файле config.h о котором CMake нихуя не знает. Запихивать конфиг в сам CMakeLists типаset(FOO_ENABLED ON)if(FOO_ENABLED)add_definition(-DFOO_ENABLED)endif()...Так делать вообще не хочется ибо это получается какая то сборная солянка, к тому же в конфиге достаточно много параметром и достаточно обьемные комментарии к каждому и пихать все в CMakeLists просто дурной тон.В общем как быть? Хотелось бы иметь один файл конфига с описанием параметром для цмейка и С чтобы цмейк понимал что билдить, а что нет и чтобы автоматов ставил дефайны нужные препроцессору.
Сорян, чувак, симейк не будет ковыряться в твоем коде. Единственный способ нормально сделать - переносить конфигурацию билда в CMakeLists.txt. В config.h такому вообще не место, как он может управлять билдом?
>>1066503 (OP)Короче сделал через генирируемый смейком конфиг и запихнул все билд опции в отдельный файл смейк вроде выглядить нормально типа так#Отдельный конфиг файлinclude(config/config.cmake)#Генирируемый хедер по этому конфигуconfigure_file(config/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config/config.h @ONLY)
>>1066503 (OP)Выносишь дефайны из .h в cmakelists верхнего уровня, пропихиваешь их в программу через аргументы make типа make -DFOO_ENABLED