Я пытаюсь получить текущие флаги компиляции из цели (которые будут флагами по умолчанию из CMAKE_CXX_FLAGS_RELWITHDEBINFO
), распечатать их, а затем заменить один из этих флагов и установить измененный список флагов с помощью target_compile_options
.Однако этот пост только о первой части, в которой рассматриваются параметры компиляции.Я поставил вопросы / проблемы в комментариях прямо в коде ниже:
cmake_minimum_required(VERSION 3.13.2)
project(hello)
add_executable(hello WIN32 hello.cpp)
# target_compile_options(hello PUBLIC "$<$<CONFIG:RELWITHDEBINFO>:/Od>")
# (see below comment for this)
get_property(HELLO_GLOBAL_COMPILE_OPTIONS GLOBAL PROPERTY COMPILE_OPTIONS) # both GLOBAL and DIRECTORY return an empty variable
message(${HELLO_GLOBAL_COMPILE_OPTIONS})
# 1) => This returns an empty variable. Shouldn't this have been populated with the contents of CMAKE_CXX_FLAGS_RELWITHDEBINFO?
get_target_property(HELLO_COMPILE_OPTIONS hello COMPILE_OPTIONS)
get_target_property(HELLO_COMPILE_OPTIONS_INTERFACE hello INTERFACE_COMPILE_OPTIONS)
message(${HELLO_COMPILE_OPTIONS})
message(${HELLO_COMPILE_OPTIONS_INTERFACE})
# 2) => These both print HELLO_COMPILE_OPTIONS-NOTFOUND. Shouldn't they have been populated with the contents of CMAKE_CXX_FLAGS_RELWITHDEBINFO at this stage?
message(${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
# This prints as expected, "/MD /Zi /O2 /Ob1 /DNDEBUG" (for MSVC).
3) Если я раскомментирую target_compile_options
в 5-й строке, HELLO_COMPILE_OPTIONS
возвращает $<$<CONFIG:RELWITHDEBINFO>:/Od>
.Но не должен ли он также вернуть «глобальные» флаги из CMAKE_CXX_FLAGS_RELWITHDEBINFO
?Поскольку исполняемый файл hello
компилируется с и , глобальными флагами и флагами, прикрепленными к цели hello
.
4) Может иметь значение: prop_tgt: документация COMPILE_OPTIONS говорит "Это свойство инициализируется свойством каталога COMPILE_OPTIONS при создании цели и используется генераторами для установки параметров компилятора." и prop_dir: документация COMPILE_OPTIONS говорит "Это свойство используется для инициализации целевого свойства COMPILE_OPTIONS при создании цели, которое используется генераторами для установки параметров компилятора." .
Так что яхочу сделать следующее.Я хочу получить флаги компиляции cmake-default для конфигурации RELWITHDEBINFO
.Затем, для одной конкретной цели , я хочу заменить /O2
(по умолчанию) на /Od
и установить параметры компиляции для этой цели на эти измененные.
Я могуПохоже, что не найти способ сделать это без изменения глобальных флагов (очень плохая практика), или дважды добавив опции компиляции для моей цели.