Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake pre build命令从外部存储库复制文件_Cmake_Build_Build System - Fatal编程技术网

cmake pre build命令从外部存储库复制文件

cmake pre build命令从外部存储库复制文件,cmake,build,build-system,Cmake,Build,Build System,在我的项目中,我有一个外部依赖项(Github存储库),我想从中将某些文件复制到源代码中,并包含项目的目录。我只需要外部存储库中源文件和头文件的一个子集,所以我只希望能够将所需文件的更新版本复制到项目中的相关目录中。我相信ExternalProject\u Add应该是从外部项目下载文件的正确命令,但我不知道如何在每次构建之前将它们复制到源代码并包含目录。是否有一个ExternalProject\u Add选项来实现这一点,或者应该使用Add\u custom\u命令添加自定义生成规则,该命令在

在我的项目中,我有一个外部依赖项(Github存储库),我想从中将某些文件复制到源代码中,并包含项目的目录。我只需要外部存储库中源文件和头文件的一个子集,所以我只希望能够将所需文件的更新版本复制到项目中的相关目录中。我相信
ExternalProject\u Add
应该是从外部项目下载文件的正确命令,但我不知道如何在每次构建之前将它们复制到源代码并包含目录。是否有一个
ExternalProject\u Add
选项来实现这一点,或者应该使用
Add\u custom\u命令添加自定义生成规则,该命令在下载外部项目后复制文件

您可以查看我要链接到的外部存储库的CMakeLists.txt。我需要编译和安装库,不想编译可执行文件

如果您的代码位于子模块内,则可以通过
git submodule
添加外部代码,也可以使用文档中显示的FetchContent来添加外部代码:

include(FetchContent)
FetchContent_Declare(
       screamrepo
       GIT_REPOSITORY "https://github.com/EricssonResearch/scream"
)
FetchContent_GetProperties(screamrepo)
if(NOT screamrepo_POPULATED)
  FetchContent_Populate(screamrepo)
endif()
# use ${screamrepo_SOURCE_DIR} for source dir
如果外部代码结构良好并公开了您想要的库,则:

add_subdirectory(the/source/path EXCLUDE_FROM_ALL)

使用图书馆。如果没有,就像您不喜欢第三方cmake配置或它附带不受支持的配置一样,编写您自己的目标
添加库
和配置,并包括使用源目录中其他存储库文件的路径。

为什么要复制这些文件?您是否查看了文档中的“示例”部分?外部存储库包含多个构建库和多个可执行文件的目标。我只对在我的项目中使用库感兴趣,不需要构建可执行文件的应用程序的源文件。因此,我不想使用外部回购中包含的
CMakeLists.txt
文件。我回顾了您链接的示例,但对于我的用例来说并没有太多意义。Cmake newbie在这里,我可能误解了一些概念。
我只对在我的项目中使用库感兴趣,我不需要应用程序的源文件
,所以你想安装库吗?这叫做安装-ex。你下载的是firefox,而不是firefox源代码。但是,如果库没有打包,那么您必须重新编译它,然后只需
add_subdirectory
it;似乎只生成了两个可执行文件。您可以查看我要链接到的外部存储库的
CMakeLists.txt
。我需要编译和安装库,不想编译可执行文件。当我添加子目录时,我想cmake会使用子目录中的
CMakeLists.txt
(这里是
code
),因此我仍然无法理解如何在不修改给定的
CMakeLists.txt
(不在我的控制下)的情况下编译库.Great-将存储库添加为git子模块,然后使用自己的配置创建自己的CMakeLists.txt。无论如何,图书馆显然是在