库CMake项目的目录结构
Directory Structure for Library CMake Projects
我有一个应用程序项目Demo
,它取决于我的共享库Hello
。库Hello
应该是可重新分发的。所以我需要分发Hello的头,以及在我的演示项目中使用它。我应该使用什么样的目录结构和CMake配置?我以前有一个平面结构,Hello
是一个只有头的子目录,没有CMakeLists.txt。现在我正在规划这个目录结构。
Demo
main.cpp
app.h
app.cpp
CMakeLists.txt
Hello
includes
matrix.hpp // header only
diagonal.hpp
point.hpp
store.h
analyzer.h
sources
store.cpp
alanyzer.cpp
CMakeLists.txt
以前的分析器是头文件,现在在头文件和源文件中分开。我只是把标题的东西混在一起。这是一个好的结构吗?但我更喜欢使用漂亮的#include <Hallo/matrix.hpp>
,而不是丑陋的#include "Hallo/includes/matrix.hpp"
或#include "matrix.hpp"
。我希望这个库Hello
也能用于其他应用程序和库。
Demo/CMakeList.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(Demo)
ADD_SUBDIRECTORY(Demo)
SET(Demo_HEADERS
app.h
)
SET(Demo_SOURCES
app.cpp
main.cpp
)
INCLUDE_DIRECTORIES(${Hello_INCLUDE_DIRS})
# ^^^^ Is this how I need to access the headers ? or just ADD_SUBDIRECTORY() will work
ADD_EXECUTABLE(Demo ${Demo_SOURCES} ${Demo_HEADERS})
TARGET_LINK_LIBRARIES(Demo Hello)
Hello/CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(Hello)
FIND_PACKAGE(Boost COMPONENTS filesystem program_options thread system serialization date_time chrono REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
SET(Hello_SOURCES
store.cpp
analyzer.cpp
)
INCLUDE_DIRECTORIES((${HELLO_SOURCE_DIR}/includes)
# ^^^^ Is this how I need to access the headers ?
ADD_LIBRARY(Hello ${Hello_SOURCES})
TARGET_LINK_LIBRARIES(Hello ${Boost_LIBRARIES})
我对这一切有点困惑,因为没有一种特定的方法来完成这些。
—EDIT—
我应该有这样的结构吗?或者其他库通常使用这种结构吗?或者通常使用的结构是什么?
hallo
includes
hallo
sources
如果你想这样访问你的标题:
#include <matrix.hpp>
则需要包含目录。我建议你下一个:
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Hello/includes)
你的错误是你从来没有在全局作用域中定义Hello_INCLUDE_DIRS变量,只在局部作用域中定义。所以你的包括什么都不做。CMAKE_SOURCE_DIR总是被定义的,并且可以安全地用于包含。因此,您需要在全局作用域中定义Hello_INCLUDE_DIRS或使用INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Hello/includes)。
的使用始终取决于开发人员。我更喜欢这样的结构:
+ Project Root
+-> Build
+-> Documentation
+-> Include
+-> Source
+-> Test
+ CMakeLists.txt
然后我可以预设根CMakeLists.txt下一个有用的变量:
SET(Project_Include_Dir "${CMAKE_SOURCE_DIR}/Include")
SET(Project_Source_Dir "${CMAKE_SOURCE_DIR}/Source")
- 如何循环打印顶点结构
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 通过方法访问结构
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在 CMake 中设置此文件夹结构?
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 使用具有C++继承的 CMake 时,我应该如何组织我的目录结构?
- 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?
- CMake 项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中
- CMake 子文件夹结构
- CMAKE-输出目录结构和QML模块
- cmake-一次针对多个体系结构,而无需在构建之间进行手动清理
- 体系结构x86_64的未定义符号,共享Util库,使用cmake构建,
- 库CMake项目的目录结构
- 使用CMake构建一个与平台无关的目录结构
- 在CMake中保持跨子目录的文件层次结构
- ld:找不到体系结构x86_64(CMake SFGUI)的符号
- cmake-glob-include同时保留目录结构
- CMake:具有单元测试的项目结构