Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 3 | 1 | 3
Назад Вниз Каталог Обновить

CMake Аноним 26/09/17 Втр 00:50:39  1066503  
15023337940741.jpg (113Кб, 607x1080)
В общем, юзаю 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 просто дурной тон.

В общем как быть? Хотелось бы иметь один файл конфига с описанием параметром для цмейка и С чтобы цмейк понимал что билдить, а что нет и чтобы автоматов ставил дефайны нужные препроцессору.
Аноним 26/09/17 Втр 01:03:46  1066507
Сорян, чувак, симейк не будет ковыряться в твоем коде. Единственный способ нормально сделать - переносить конфигурацию билда в CMakeLists.txt. В config.h такому вообще не место, как он может управлять билдом?
Аноним 26/09/17 Втр 05:11:37  1066540
>>1066503 (OP)
Короче сделал через генирируемый смейком конфиг и запихнул все билд опции в отдельный файл смейк вроде выглядить нормально типа так

#Отдельный конфиг файл
include(config/config.cmake)

#Генирируемый хедер по этому конфигу
configure_file(config/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config/config.h @ONLY)
Аноним 26/09/17 Втр 09:10:38  1066581
>>1066503 (OP)
Выносишь дефайны из .h в cmakelists верхнего уровня, пропихиваешь их в программу через аргументы make типа make -DFOO_ENABLED

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 3 | 1 | 3
Назад Вверх Каталог Обновить

Топ тредов
Избранное