c – 图书馆CMake项目的目录结构
我有一个应用程序项目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也将用于其他应用程序和库. 演示/ 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 解决方法
如果您想要像这样访问您的标题:
#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") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |