【发布时间】:2018-12-14 03:03:00
【问题描述】:
我正在尝试将我的旧 CMake 移植到现代 CMake(CMake 3.0.2 或更高版本)。在旧设计中,我有多个 CMakelists.txt,每个目录都包含一个 CMakeLists.txt 文件。
我当前项目的目录结构如下:
.
├── VizSim.cpp
├── algo
├── contacts
│ ├── BoundingVolumeHierarchies
│ │ └── AABBTree.h
│ └── SpatialPartitoning
├── geom
│ └── Geometry.h
├── math
│ ├── Tolerance.h
│ ├── Vector3.cpp
│ └── Vector3.h
├── mesh
│ ├── Edge.h
│ ├── Face.h
│ ├── Mesh.cpp
│ ├── Mesh.h
│ └── Node.h
├── util
| |__ Defines.h
| |__ Math.h
|
└── viz
└── Renderer.h
我打算做的只是使用一个 CMakelists.txt 并将所有 cpp 文件放在 SOURCE 中,并将所有头文件放在 HEADER 中并使用 add_executable。
set (SOURCE
${SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/VizSim.cpp
....
)
set (HEADER
${HEADER}
${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.h
${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.h
....
)
add_library(${PROJECT_NAME} SHARED ${SOURCE})
如果使用单个 CMakeLists.txt 是一种好习惯,我会担心这样做。那么单个 CMakeLists.txt 就足够了吗,还是我需要为每个文件夹创建一个 CMakeLists.txt?
我只能想到在我的项目中有多个 CMakeLists.txt 的一个很好的理由,那就是模块化。
考虑到我的项目最终会成长。
【问题讨论】:
-
AFAK,不管模块化,我想不出任何理由使用多个 CMakeLists.txt
-
我同意@WeiGuo:通常情况下,每个库(项目)都有一个
CMakeLists.txt,源代码在一个目录中。其中一些库有很多文件,我将其中一些文件分隔在子目录中。在这种情况下,我使用与您类似的方法(除了一个例外,我为不同的目录引入了多个变量并添加了语句以让 cmake 为 VS 生成多个子文件夹)。 -
@Scheff 谢谢你的回答。所以我应该使用一个 CMakeLists.txt。但是当你说“我为不同的目录引入了多个变量并添加了语句让 cmake 为 VS 生成多个子文件夹”时是什么意思你如何告诉 cmake 生成多个子文件夹。你能不能给我一点提示我怎么能做到这一点。这就是你的意思吗stackoverflow.com/questions/7787823/…
-
这就是你的意思stackoverflow.com/questions/7787823/… 类似。 ;-)
-
你如何告诉 cmake 生成多个子文件夹。 对不起,你误会了。我的意思是 VisualStudio 的可视化项目树中的子文件夹。将源文件分离到目录是由我完成的(我不希望 cmake 对此进行任何更改)。 ;-)
标签: cmake