Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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

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项目库 我正在第一次使用CMAGE组装一个小型C++项目的过程中。我目前的项目结构是 ├── bch │ ├── CMakeLists.txt │ ├── 女朋友 │ │ ├── CMakeLists.txt │ │ ├── 包括 │ │ │ └── gf.h │ │ └── src │ │ └── gf.cpp │ ├── 包括 │ │ └── bch.h │ └── src │ └── bch.cpp ├── 理学士 │ ├── CMakeLists.txt │ ├── 包括 │ │ └── 理学学士 │ └── src │ └── bsc.cpp ├── CMakeLists.txt ├── .gitignore └── main.cpp_C++_Cmake - Fatal编程技术网

包括CMake项目库 我正在第一次使用CMAGE组装一个小型C++项目的过程中。我目前的项目结构是 ├── bch │ ├── CMakeLists.txt │ ├── 女朋友 │ │ ├── CMakeLists.txt │ │ ├── 包括 │ │ │ └── gf.h │ │ └── src │ │ └── gf.cpp │ ├── 包括 │ │ └── bch.h │ └── src │ └── bch.cpp ├── 理学士 │ ├── CMakeLists.txt │ ├── 包括 │ │ └── 理学学士 │ └── src │ └── bsc.cpp ├── CMakeLists.txt ├── .gitignore └── main.cpp

包括CMake项目库 我正在第一次使用CMAGE组装一个小型C++项目的过程中。我目前的项目结构是 ├── bch │ ├── CMakeLists.txt │ ├── 女朋友 │ │ ├── CMakeLists.txt │ │ ├── 包括 │ │ │ └── gf.h │ │ └── src │ │ └── gf.cpp │ ├── 包括 │ │ └── bch.h │ └── src │ └── bch.cpp ├── 理学士 │ ├── CMakeLists.txt │ ├── 包括 │ │ └── 理学学士 │ └── src │ └── bsc.cpp ├── CMakeLists.txt ├── .gitignore └── main.cpp,c++,cmake,C++,Cmake,目前我有gf作为bch的子目录。bch/CMakeLists的内容是 cmake_minimum_required(VERSION 3.17) project(bch VERSION 0.1.0) # Targets add_library(bch STATIC src/bch.cpp) # Dependant add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/gf) target_link_libraries(bch PUBLIC gf) # Ex

目前我有
gf
作为
bch
的子目录。
bch/CMakeLists
的内容是

cmake_minimum_required(VERSION 3.17)
project(bch VERSION 0.1.0)

# Targets
add_library(bch STATIC src/bch.cpp)

# Dependant
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/gf)
target_link_libraries(bch PUBLIC gf)

# Export to dependants
target_include_directories(bch PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

我想使用
gf
CMake项目,并将其放置在
bch
的目录路径之外。当使用
add\u子目录
命令时,这似乎不是一个受支持的结构,除非我遗漏了什么。一般来说,要实现目录结构与依赖关系树分离的目标,当前的“最佳实践”是什么?

如果您想将项目与依赖关系分离,那么我建议将cmake项目拆分为两个单独的项目,导出依赖目标,然后使用“find_package”导入它。以下是该主题的快速谷歌搜索:

[编辑]

对于更一般的方法,我建议使用cmake文档:

这个想法是:

  • 在要生成'*ConfigVersion.cmake'文件的依赖项项目中,使用'install'命令中的'EXPORT'参数安装所有需要的文件(头文件、二进制文件和*ConfigVersion.cmake)

  • 在最终项目中,使用“find_package”导入依赖项


  • 对于更大的库项目,我还建议使用名称空间只允许导入库的选定部分。

    感谢链接,尽管本演练与VS环境紧密耦合。我在find_package()功能中看到的问题是清理打包项目所需的所有额外困难。即使增加了复杂性,它也可能最终成为一条出路。我在搜索一些答案时找到了。我已用更一般的描述更新了答案。我希望它能帮助您。“我想使用
    gf
    CMake项目,并将其放置在
    bch
    的目录路径之外。在使用
    add\u子目录
    命令时,这似乎不是一个受支持的结构”-您为什么认为它不受支持?如果出现错误
    add_子目录未提供二进制目录
    ,请查看并回答解决方法。这是我选择的当前配置,直到我能够将
    gf
    库打包到模块中为止。我正在为
    gf
    二进制文件使用
    bch/build
    目录,这似乎很有效。我读到的各种博客文章似乎暗示,对于树中的紧密耦合项目,建议使用
    add_子目录