LINUX.ORG.RU

История изменений

Исправление Dr64h, (текущая версия) :

Можно ли использовать $<CONFIG> в имени переменной? Типа ${CMAKE_C_FLAGS_$<CONFIG>}? В каком порядке оно раскрывается?

Неа, подставлять именно к имени переменной нельзя, можно только к строке. Как я понимаю вместо $<CONFIG> подставляется значение только после этапа генерации.

Можно использовать например так:

set(BUILD_CONFIG_DIR ${CMAKE_BINARY_DIR}/$<CONFIG>)
# BUILD_CONFIG_DIR после генерации будет == "/home/username/projects/my_project/build/Debug"

Можно вместо «${CMAKE_C_FLAGS_$<CONFIG>», использовать это:

set(CMAKE_BUILD_TYPE "Debug")
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UCASE)

message(STATUS "CMAKE_C_FLAGS_<CONFIG> == ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UCASE}}")

Но надо учитывать, что при этом переменная «CMAKE_BUILD_TYPE» обязательно должна быть определена, иначе будет ошибка.

Исходная версия Dr64h, :

Можно ли использовать $<CONFIG> в имени переменной? Типа ${CMAKE_C_FLAGS_$<CONFIG>}? В каком порядке оно раскрывается?

Неа, подставлять именно к имени переменной нельзя, можно только к строке. Как я понимаю вместо $<CONFIG> подставляется значение только после этапа генерации.

Можно использовать например так:

set(BUILD_CONFIG_DIR ${CMAKE_BINARY_DIR}/$<CONFIG>)
# BUILD_CONFIG_DIR после генерации будет == "/home/username/projects/my_project/build/Debug"

Можно вместо «${CMAKE_C_FLAGS_$<CONFIG>», использовать это:

set(CMAKE_BUILD_TYPE "Debug")
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UCASE)

message(STATUS "CMAKE_CXX_FLAGS_<CONFIG> == ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UCASE}}")

Но надо учитывать, что при этом переменная «CMAKE_BUILD_TYPE» обязательно должна быть определена, иначе будет ошибка.