CMake安装(CODE ...)意外行为

时间:2017-02-06 17:17:12

标签: bash cmake

我的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

当我指定一个lib:

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

它也有效。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

查看this answer示例。

答案 1 :(得分:0)

正如建议的dreamzor,我终于找到了以下解决方案:

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