<<Modern CMake>> 翻译 2.4 项目目录结构
<<Modern CMake>> 翻译 2.4 项目目录结构
本节内容有点跑题。但我认为这是一个很好的方法。 我将告诉你如何规划项目的目录。 这是基于惯例,但将帮助您:
- 轻松阅读其他按照相同模式的项目,
- 避免导致冲突的模式,
- 避免混淆和使构建变得复杂。
首先,如果您的项目被叫做 project
,包含一个链接库叫做 lib
,一个可执行文件叫做 app
, 那么您的文件目录应该类似以下结构:
- project
- .gitignore
- README.md
- LICENCE.md
- CMakeLists.txt
- cmake
- FindSomeLib.cmake
- include
- project
- lib.hpp
- src
- CMakeLists.txt
- lib.cpp
- apps
- CMakeLists.txt
- app.cpp
- tests
- testlib.cpp
- docs
- Doxyfile.in
- extern
- googletest
- scripts
- helper.py
名字不是绝对的; 你经常会看到关于 test/
vs. tests/
的争论, 应用程序文件夹可能被叫做其他名称(对于仅限库的项目不存在)。 您还有时会看到 python
目录用于 python
绑定, 或者一个 CMake 文件夹,来放置 CMake 助手文件,例如 Find<library>.cmake
文件。 但主要文件夹上面都列出来了。
注意一些已经很明显的事情; CMakeLists.txt
文件被分别放置在所有源目录中,但 include
目录中没有。 这是因为您应该能够拷贝 include
目录到 /usr/include
或者类似的地方(配置头文件除外,我将在另一章中介绍), 没有任何额外的文件或导致任何冲突。 这也是为什么在 include
目录中有一层 project
目录的原因。 使用 add_subdirectory
来添加包含 CMakeLists.txt
文件的子目录。
您经常需要一个 cmake
目录来放置所有构造助手模块。 这是你的 Find*.cmake
文件该存放的地方。 一组常见的助手文件可以在这里看到 github.com/CLIUtils/cmake。
可以这样将此文件夹添加到 CMake 路径上:
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
您的 extern
文件夹应该只包含 git 子模块。 这样,您可以显式控制依赖项的版本,同时可以轻松升级。 有关添加子模块的示例,请参阅“测试”一章。
在你的 .gitignore
中,你应该有一些像这样的东西 /build*
, 让用户可以在源代码目录创建编译目录,并在这些目录中构建项目。 一些软件包禁止这样做,但它比做一个真正的源外构建要好得多,因为那样每次构建你必须为你构建的软件包键入不同的命令行。
如果要避免在源文件夹中直接进行构建,你可以将其下面这些行添加到你的 CMakeLists.txt
文件的顶部附近:
### Require out-of-source builds
file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}/CMakeLists.txt" LOC_PATH)
if(EXISTS "${LOC_PATH}")
message(FATAL_ERROR "You cannot build in a source directory (or any directory with a CMakeLists.txt file). Please make a build subdirectory. Feel free to remove CMakeCache.txt and CMakeFiles.")
endif()
最新文章
- T-SQL字符串相加之后被截断的那点事
- Android自定义组件
- DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单
- python 反射器
- “maven编码gbk的不可映射字符”解决办法
- servlet学习笔记_3
- jquery 插件
- Linux文件分类
- 剑指 offer set 1 二维数组中查找
- html5 存储篇(一)
- 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
- android 向webview传值
- 用python计算圆周率PI
- CSS魔法(三)浮动、相对定位、绝对定位
- python(nmap模块、多线程模块)
- 使用tailor 轻松方便的集成web 框架react&;&;vue
- Aerospike系列:5:安装AMC
- POJ-3009 Curling 2.0 (DFS)
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
- VS2010快捷键大全----养成良好的习惯
热门文章
- OpenCV常用数据结构和函数
- 如何使用JavaScript导入和导出Excel文件
- ES6_08_Iterator遍历器
- MySQL错误:The user specified as a definer (XXX@XXX) does not exist (1449错误)最简解决方案
- java中session和application的用法
- vue computed监听多个属性
- 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
- ServiceFabric极简文档-4.1 学习路线图
- 将Ueditor文件上传至OSS
- JAVA环境+eclipse+tomcat+maven配置