LINUX.ORG.RU

Получить ключи компиляции для цели

 


1

2

В cmake куча способов установить ключи компиляции:

# 1. Варварский:
set(CMAKE_CXX_FLAGS …)

# 2. Простой:
add_compile_options(…)

# 3. Быдляче-деприкейтный:
add_definitions(…)

# 4. Можно добавлять специфично для цели:
target_compile_options(target PRIVATE …)

# 5. Можно изменять свойства целей напрямую:
set_target_properties(target PROPERTIES COMPILE_OPTIONS …)
set_target_properties(target PROPERTIES COMPILE_FLAGS …)
set_target_properties(target PROPERTIES COMPILE_DEFINITIONS …)

# 6. Есть переменные, неявно аффектящие ключи:
set(CMAKE_CXX_STANDARD 14)

# 7. Есть переменные, специфичные для типа билда:
set(CMAKE_CXX_FLAGS_DEBUG …)

# 8. Можно дать CMake самостоятельно вычислить необходимые ключи:
target_compile_features(target PRIVATE cxx_constexpr)

# И возможно есть ещё

И это немного взрывает мозг. Понятно, что узнать, как компилируется конкретная цель можно, через make VERBOSE=1. Но, допустим, у меня есть модуль, который опирается на ключи компиляции для конкретной цели: как мне в таком случае узнать ключи, с которыми она будет компилироваться? Пока ничего лучше этого придумать не смог:

function(get_compile_options _target)
  set(_target_dir "$<TARGET_PROPERTY:${_target},INCLUDE_DIRECTORIES>")
  set(_target_def "$<TARGET_PROPERTY:${_target},COMPILE_DEFINITIONS>")
 # и далее в том же духе
 set(_all_options "${CMAKE_CXX_FLAGS}${_target_def}${_target_dir}…")
endfunction()



Последнее исправление: Anvill (всего исправлений: 1)

# И возможно есть ещё

set_property(TARGET program PROPERTY C_STANDARD 99)

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.