我的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
它也有效。
有什么想法吗?
答案 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\")")