C++ 在Cmake中添加全局预构建目标

C++ 在Cmake中添加全局预构建目标,c++,cmake,C++,Cmake,我们正在从Clearmake迁移到Cmake。我们的代码库中的一个项目只对所有头使用一个位置(然后每个人都包括这个位置)。在以前的Clearmake中,我们有一个在编译之前运行的目标export\u include。此目标将获取变量中指定的所有标头,并将它们复制到全局位置。它甚至聪明到只复制丢失或更改的内容 有没有办法在Cmake中复制这种行为?我查看了add_custom_命令和add_custom_目标add_custom_命令只能用作生成目标的一部分(而不是全局),并且add_custom

我们正在从Clearmake迁移到Cmake。我们的代码库中的一个项目只对所有头使用一个位置(然后每个人都包括这个位置)。在以前的Clearmake中,我们有一个在编译之前运行的目标
export\u include
。此目标将获取变量中指定的所有标头,并将它们复制到全局位置。它甚至聪明到只复制丢失或更改的内容

有没有办法在Cmake中复制这种行为?我查看了
add_custom_命令
add_custom_目标
add_custom_命令
只能用作生成目标的一部分(而不是全局),并且
add_custom_目标
始终被认为是过时的,因此它总是反复复制所有标题。理想情况下,我会运行
makeexport\u headers
,它会将新的和更改的头复制到共享位置。如果我运行
make
(不带参数),它将首先执行
export\u headers
,然后才开始重建

在普通制造术语中,通常通过运行

make
make install
我需要像这样的东西

make export
make
make install
理想情况下,一个
make
target可以运行上述三个


另外,数十个目录中有1300多个标题,大约有150个目标(库和二进制文件),因此返回并指定每个目标的依赖项并不是一个真正的选项。

CMake会找出需要包含哪些标题。您只需告诉它应该使用哪些包含目录,其他一切都已为您完成,不是吗?@usr1234567是的,我知道要使用哪些包含目录,我可以通过包含目录轻松指定。问题是把所有的头都移动到那里。我的观点是,你不应该移动头,而是告诉CMake在哪里可以找到它们。复制源目录中的标题会带来麻烦。CMake会找出需要包含哪些标题。您只需告诉它应该使用哪些包含目录,其他一切都已为您完成,不是吗?@usr1234567是的,我知道要使用哪些包含目录,我可以通过包含目录轻松指定。问题是把所有的头都移动到那里。我的观点是,你不应该移动头,而是告诉CMake在哪里可以找到它们。在源目录中复制头会带来麻烦。