2017-01-04 54 views
1

我有一個CMakeLists.txt,它可以構建多個目標。調用一個foo和一個bar請解釋此CMake語法,用於將編譯器選項添加到目標

目前foo兩者份額bar一些設置給ccmake配置

CMAKE_CXX_FLAGS = -W -Wall 
CMAKE_CXX_FLAGS_DEBUG = -g -pg 

我需要添加-fPICfoo但不bar。據this answer我想用TARGET_COMPILE_OTIONS

target_compile_options(foo PUBLIC "$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>") 
target_compile_options(foo PUBLIC "$<$<CONFIG:RELEASE>:${MY_RELEASE_OPTIONS}>") 

注意target_compile_options 添加[原文]選項

這聽起來就像是我所需要的,這是什麼語法是什麼意思?

"$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>" 

爲了澄清,我想補充-fPIC作爲額外標誌編譯foo但不編譯bar

時請說明$<$<業務和告訴我的時候,具體如何-fPIC將被添加foo的標誌。

+0

用-fPIC或PIC替換'$ {MY_ * DEBUG_OPTIONS}',不確定。 – usr1234567

回答

1

貌似$<$<落入發生器表情類別:https://cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html#manual:cmake-generator-expressions(7), 精確到

邏輯表達式

你的情況

所以,

"$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>" 

擴展到MY_DEBUG_OPTIONS當使用DEBUG配置,否則擴展爲空。 因此,在你的情況下,你應該添加-fPIC例如MY_DEBUG_OPTIONS。 更一點點精確:

$<CONFIG:DEBUG> 

的計算結果爲1或0取決於天氣CONFIG是DEBUG與否,分別。 然後,你將有兩種:

$<0:${MY_DEBUG_OPTIONS}> 

$<1:${MY_DEBUG_OPTIONS}>

兩個表達式上面會以如下方式計算:

$<0:${MY_DEBUG_OPTIONS}>將評估爲

空字符串(忽略$ {MY_DEBUG_OPTIONS})

$<1:${MY_DEBUG_OPTIONS}>將評估爲

內容的$ {} MY_DEBUG_OPTIONS

的文檔狀態。
在最後一種情況下,-fPIC將被添加到CMAKE_CXX_FLAGS或CMAKE_CXX_FLAGS_DEBUG之一。