2013-09-14 4 views
2

Я пытаюсь установить значение по умолчанию для флагов компилятора так, как это может быть позже изменено пользователем с помощью -DCMAKE_CXX_FLAGS_RELEASE = "..." и аналогичного в командной строке.CMake: Установить флаги компилятора, которые могут быть изменены пользователем.

Если я использую:

SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND") 

чем флаги не могут быть изменены с помощью или командную строку ccmake.

Если я использую

SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "") 

чем не установлены флаги на всех.

Есть ли правильный способ сделать это?

ответ

2

Итак, экспериментируя, я понял это (вроде).

Сначала я узнал, что версия CACHE не работает, поскольку в кеше уже есть значение. То есть, если я применить силу в конце этого он получает набор:

SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" FORCE) 

, очевидно, это не позволит пользователям указывать флаги самостоятельно, делая это эквивалентно первый вариант.

Решение:

Put кэш команды настройки только в начале Cmake файла (перед командой проекта), как-то это устанавливает значения перед CMake устанавливает их внутри. Итак, теперь это выглядит так:

SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "") 
SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "") 
... 
project(whatever) 
... 

и он работает. Я предполагаю, что это будет плохо, если вы используете компиляторы, для которых требуются разные флаги по умолчанию. Но тогда вы не должны устанавливать по умолчанию все равно.

Мне все еще интересно, есть ли более чистый способ.

+0

Только что обнаружены флаги, такие как CMAKE_CXX_FLAGS_RELEASE_INIT, но они не работают так, как я хотел (они, похоже, вообще не влияют на значения по умолчанию, если они помещены в CMakeLists.txt) –

+0

Проблема в том, что переменные, такие как MSVC для проверки компилятора не устанавливается перед вызовом project(). – Trass3r

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