2012-06-26 3 views
0

У меня есть проект CMake, который я хочу скомпилировать, используя g ++, MinGW/g ++ (4.x each), Clang (3.x) и MSVC++ (> = V8) ,Передача командной строки компилятора на препроцессор с использованием CMake

Я хочу иметь символ прекомпилятора с аргументами компилятора или командной строки.

Это полезно, чтобы убедиться, была ли включена оптимизация и какие ключи были включены в командной строке.

E.g. программа, составленная с g++ -O3 -DNDEBUG -g0, должна знать, что флаги - "-O3 -DNDEBUG -g0". При написании ручных Makefiles я мог просто собирать флаги в переменной, а затем передать это компилятору с командной строкой g++ -O3 -DNDEBUG -g0 -DCOMPILER_ARGS="-O3 -DNDEBUG -g0".

Как добиться этого с помощью CMake?

ответ

0

add_definitions("-DCOMPILER_ARGS=\"${CMAKE_CXX_FLAGS}\")

Но надо знать, что CMAKE_CXX_FLAGS переменная содержит только флаги, установленные пользователем. Если вы хотите, чтобы весь набор флагов компиляции использовал целевое свойство COMPILE_FLAGS. Это значение может быть получено функцией get_target_property().

+0

-1 'CMAKE_CXX_FLAGS' не пуст по умолчанию в Windows. Также это пропускает все флаги, хранящиеся в переменных конфигурации, таких как 'CMAKE_CXX_FLAGS_DEBUG'. – Fraser

+0

Хорошо, я не сказал, что на окнах пусто. И я сказал, что у 'COMPILE_FLAGS' есть все флаги. В любом случае, спасибо за -1, теперь моя репутация круглая. – arrowd

+0

Вы сказали, что переменная '' CMAKE_CXX_FLAGS' содержит только флаги, установленные пользователем ". Это не всегда так. – Fraser

0

Для всех вариантов, кроме MSVC, а не создавать определение препроцессора, вероятно, вы должны просто использовать make VERBOSE=1 при строительстве или добавить

set(CMAKE_VERBOSE_MAKEFILE ON) 

к вашему CMakeLists.txt.

Для MSVC вы можете проверить аргументы командной строки каждого проекта из среды IDE: Страницы свойств -> Свойства конфигурации -> C/C++ -> Командная строка и Страницы свойств -> Свойства конфигурации -> Линкера -> Командная строка.

+0

@Manuel нужен способ передать скомпилированные флаги в программу, если я его получу. Вы предлагаете ему скопировать его вручную? – arrowd

+0

Ну, я предлагаю, чтобы было довольно неортодоксально иметь параметры команды, содержащиеся в проекте, в качестве определения препроцессора. – Fraser

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