我正在尝试让CMake运行三个bash命令或一个bash脚本。但是,我似乎无法让它发挥作用。
bash命令是:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
基本上,我希望CMake在该目录中构建库(如果它尚不存在)。
这是我尝试过的CMake代码:
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
execute_process(COMMAND make)
execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
但是,它没有构建任何东西。我究竟做错了什么?
另外,虽然我在这里问这个问题:是否应该包含第三个命令,移动到二进制文件夹?
谢谢!
答案 0 :(得分:18)
execute_process()
。但是你希望它在构建时运行,因此add_custom_command()
和add_custom_target()
是你正在寻找的。 p>
在这种特殊情况下,你想生成一个输出文件,所以你应该选择add_custom_command()
(两者基本相同,但command
生成一个或多个输出文件,而target
没有。
对此的cmake代码段应如下所示:
add_custom_command(
OUTPUT ${CMAKE_SOURCE_DIR}/dependencies/library/lib.o
WORKING_DIR ${CMAKE_SOURCE_DIR}/dependencies/library
COMMAND make
)
然后,您必须将输出文件作为依赖项添加到另一个目标中,并且所有内容都应该(希望)按预期工作。
您还可以向DEPENDS
调用添加add_custom_command()
语句,以便在某些输入源发生更改时重建目标文件。