在cmake中进行make install后进行后期处理

时间:2017-05-09 16:43:55

标签: cmake

我正试图在我的#34; make install"

结尾处制作我的可执行文件的副本

我需要做类似的事情:

cp bin/prog bin/prog1

我已将以下内容添加为我的CMakelists.txt中的最后一行

install (CODE  "execute_process(COMMAND /src/copyExe.sh ${BIN_DIR})")

copyExe.sh是一个执行复制的bash脚本。为了获得理想的效果,我需要运行" make install"两次。它第一次抱怨prog不存在,然后将文件复制到bin。第二次找到编程并能够复制。

有没有办法确保我的copyExe脚本在文件被复制到bin后运行?

目录结构

site
    bin
    src
        CMakeLists.txt ( contains add_dir(foo) and install(CODE....))
    foo
        CMakeLists.txt ( contains install( TARGET..... ))

1 个答案:

答案 0 :(得分:1)

install命令的CMake documentation表示(关于安装逻辑):

  

未定义跨目录的顺序。

看起来它倾向于以与add_subdirectory()调用相同的顺序处理不同子目录中的安装逻辑。

但是,它处理当前目录 install()调用的安装逻辑,然后再处理子目录中的安装逻辑。

您可以将install(CODE)移到某个子目录(例如fix_binaries),然后在CMakeLists.txt的{​​{1}}末尾添加此子目录:

<强>的src / fix_binaries /的CMakeLists.txt

src

<强>的src /的CMakeLists.txt

install(CODE ...)

此方法适用于我参与的项目之一(related code)。