2014-12-25 58 views
3

我遇到CMake問題: 我使用execute_process()來設置變量,我希望該變量將它作爲選項傳遞給編譯器。 CMake在變量周圍設置引號,以便編譯器得到錯誤的輸入。當使用CMake傳遞過程輸出作爲特定目標的編譯選項時避免引號

具體而言:我需要僅用特定目標編譯SDL2。

# CMakeLists.txt 
execute_process(COMMAND "sdl2-config" "--cflags" OUTPUT_VARIABLE SDL2_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) 
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS}) 

sdl2-config --cflags輸出是:

-I/usr/include/SDL2 -D_REENTRANT 

的CMake現在調用編譯器以這樣的方式

/usr/bin/c++ ... "-I/usr/include/SDL2 -D_REENTRANT" ... 

當然,這是行不通的。我需要擺脫引號。

如果使用

add_definitions(${SDL2_CFLAGS}) 

一切正常。但我需要target_compile_options,因爲我希望選項不在所有目標上。

回答

3

可以使用separate_arguments命令:

separate_arguments(SDL2_CFLAGS UNIX_COMMAND "${SDL2_CFLAGS}") 
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS}) 
+0

所以當我這樣做,我得到虛假的輸出。我的輸入看起來像「-I/foo/bar -I/foo/baz/-I/usr/foo」(注意多餘的空格),而separate_arguments返回類似「-I/foo/bar/-I/foo/baz/-I/usr/foo「。換句話說,它似乎需要多個空格並完全刪除它們,留下了一個損壞的include_directories()列表。有任何想法嗎? – sagargp

相關問題