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