【发布时间】:2014-10-06 14:00:46
【问题描述】:
我有一个应用程序项目Demo,它依赖于我的共享库Hello。库Hello 应该是可再分发的。所以我需要分发 Hello 的标头并在我的 Demo 项目中使用它。我应该使用什么目录结构和 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)
你好/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})
我对这一切感到有些困惑,因为没有一种特定的方法可以做到这一切。
--- 编辑 ---
我应该有这个结构吗?或者其他一些库通常使用这种结构吗?或者通常采用的结构是什么?
hallo
includes
hallo
sources
【问题讨论】:
标签: c++ cmake shared-libraries directory-structure