使用 CMake 将进程输出作为特定目标的编译选项传递时避免使用引号

the*_*ker 7 quotes cmake

我有一个 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})
Run Code Online (Sandbox Code Playgroud)

的输出sdl2-config --cflags是:

-I/usr/include/SDL2 -D_REENTRANT
Run Code Online (Sandbox Code Playgroud)

CMake 现在以这种方式调用编译器:

/usr/bin/c++ ... "-I/usr/include/SDL2 -D_REENTRANT" ...
Run Code Online (Sandbox Code Playgroud)

这当然行不通。我需要去掉引号。

如果一个使用

add_definitions(${SDL2_CFLAGS})
Run Code Online (Sandbox Code Playgroud)

一切正常。但我需要,target_compile_options因为我不想要所有目标上的选项。

Fra*_*ser 5

您可以使用以下separate_arguments命令:

separate_arguments(SDL2_CFLAGS UNIX_COMMAND "${SDL2_CFLAGS}")
target_compile_options(SpecialTarget PUBLIC ${SDL2_CFLAGS})
Run Code Online (Sandbox Code Playgroud)