通过CMake运行bash命令

时间:2014-09-05 14:12:12

标签: bash makefile cmake command

我正在尝试让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")

但是,它没有构建任何东西。我究竟做错了什么?

另外,虽然我在这里问这个问题:是否应该包含第三个命令,移动到二进制文件夹?

谢谢!

1 个答案:

答案 0 :(得分:18)

在配置时执行

execute_process()。但是你希望它在构建时运行,因此add_custom_command()add_custom_target()是你正在寻找的。

在这种特殊情况下,你想生成一个输出文件,所以你应该选择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()语句,以便在某些输入源发生更改时重建目标文件。