我正在处理一个更大的项目,我们正在考虑如何组织大型构建。我认为它应该/可以用 cmake 来完成,但目前我不知道如何满足我们的所有要求。
这是我们的项目组织的样子:
考虑到 cmake,我正在考虑这样的目录结构
- Root directory
- Build Module 1
- Build Module 1 Static Lib
- Build Module 1 Unit Test
- Build Module 1 Public Interface
- Build Module 2
- ...
- Build Module n
Run Code Online (Sandbox Code Playgroud)
第一个问题:从哪里开始放置 CMakeLists.txt 文件?我会从构建模块级别开始,而不是从 root 开始。这样,如果开发人员只想构建模块 3、4 和 5,他可以创建他的自定义模块。
第二个:如何处理部署/查找包。理想情况下,依赖项的查找机制将允许创建从源构建的构建以及仅从源获取依赖二进制文件的构建。我希望这可以使用 find_package 和 xxxConfig.cmake / FindXXX.cmake 以某种方式完成。有人能告诉我怎么做吗?如何创建这些文件?如何使用 cmake 创建适当的部署?
第三个问题:有人了解我们如何将 nuget 集成到这个过程中吗?这可以作为 cpack 生成器完成吗?已经有了吗?cpack 能否替代 nuget(意味着它可以从某个远程位置获取二进制文件并在构建过程中安装它们)?
谢谢你。托比亚斯
1) 您可以创建一个顶级 CMakeLists.txt 文件并具有用于构建每个模块的缓存选项:
开发人员可以使用这些选项来构建 3、4、5。或者,记录如何添加他们需要的 add_subdirectory() 调用。如果模块也应该独立构建(看起来如此),那么这样做的方法是:
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
# Top-level build. Find dependencies.
find_package(Module1).
else()
# Built as a subdir together with depenendencies.
# Dependencies are already in scope.
endif()
Run Code Online (Sandbox Code Playgroud)
2)我为 CMake 3.0 编写了此文档,但其中大部分适用于 2.8:
http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html
您可能可以将配置文件添加到源中,其中包含类似的内容
add_subdirectory(${CMAKE_CURRENT_LIST_DIR})
Run Code Online (Sandbox Code Playgroud)
使用 find_package 并操作 CMAKE_PREFIX_PATH 来获取“源包”。
3) cmake 没有附带现有的 nuget cpack 生成器。您可能想查看ExternalProject:
http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html
| 归档时间: |
|
| 查看次数: |
1019 次 |
| 最近记录: |