CMake install(代码 ..) 意外行为



我的CMakeLists中有以下行.txt:

set(MY_COMMAND "cp /absolute/path/*.so /other/absolute/path")
install(CODE "execute_process(COMMAND ${MY_COMMAND})")

它返回以下错误:

cp: cannot stat ‘/absolute/path/*.so’: No such file or directory

当我指定一个库时:

set(MY_COMMAND "cp /absolute/path/somelib.so /other/absolute/path")
install(CODE "execute_process(COMMAND ${MY_COMMAND})")

它有效。

当我从终端运行第一个命令时:

cp /absolute/path/*.so /other/absolute/path

它也可以工作。

知道吗?

当您在终端中运行通配符表达式命令时,通配符扩展发生在终端本身内,而不是通过 cp

但是,当它从CMake完成时,显然没有通配符的扩展。因此,您需要先获取文件列表,然后使用获取的文件列表运行所需的命令。

查看此答案以获取示例。

正如建议的dreamzor,我最终得出了以下解决方案:

install(CODE "file(GLOB MY_LIBS "/absolute/path/*.so")"
        CODE "file(INSTALL ${MY_LIBS} DESTINATION "/other/absolute/path")")

最新更新