我遇到了CMake的问题:
我使用execute_process()
来设置变量,我希望该变量将其作为选项传递给编译器。
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
,因为我希望选项不在所有目标上。
答案 0 :(得分:4)
您可以使用separate_arguments
命令:
separate_arguments(SDL2_CFLAGS UNIX_COMMAND "${SDL2_CFLAGS}")
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS})