如何使用cmake创建仅页眉的库? 如何在CMASE中创建一个项目,将所有C++文件收集到一个头文件中?
我有这个项目结构如何使用cmake创建仅页眉的库? 如何在CMASE中创建一个项目,将所有C++文件收集到一个头文件中?,c++,cmake,shared-libraries,C++,Cmake,Shared Libraries,我有这个项目结构 / project/ folder1/ file.cpp file.hpp folder2/ ...etc CMakeLists.txt tests/ test.cpp CMakeLists.txt CMakeList.txt 根目录cmakelists.txt cmake_minimum_required (VERSION 3.8) project ("CMak
/
project/
folder1/
file.cpp
file.hpp
folder2/
...etc
CMakeLists.txt
tests/
test.cpp
CMakeLists.txt
CMakeList.txt
根目录cmakelists.txt
cmake_minimum_required (VERSION 3.8)
project ("CMakeProject"
LANGUAGES C CXX)
set(CMAKE_EXECUTABLE_SUFFIX ".exe")
include(GNUInstallDirs)
add_subdirectory ("project")
option(ENABLE_TESTING OFF)
if (ENABLE_TESTING)
enable_testing()
add_subdirectory("tests")
endif()
项目中的CMakeLists.txt
cmake_minimum_required (VERSION 3.8)
file(GLOB projectSRC
"*/*.cpp"
"*/*.hpp"
"*.cpp"
"*.hpp"
)
add_library(project INTERFACE)
message(STATUS "CMake inatall directory: " ${CMAKE_INSTALL_INCLUDEDIR})
target_include_directories(project
INTERFACE
$<BUILD_INTERFACE:${PROJECT_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
如何生成一个标题并使用它(在测试或其他项目中)或使此库能够具有模板?第一个更好
如何使用cmake创建仅页眉的库
像这样:
add_library(project INTERFACE)
target_include_directories(project INTERFACE .)
然后在使用库的目标中:
target_link_libraries(dependee
PUBLIC/INTERFACE/PRIVATE # pick one
project)
并包括如下标题:
#include <project/folder1/file.hpp>
#包括
如果您希望所有内容都包含在标题中,那么首先为什么要将内容放入.cpp文件中?这可能是不可能的。您可以定义单个cpp文件的局部变量,如果您这样做了,那么如果多个cpp文件定义同一个变量,您可能会重新定义某些变量。如果这很重要,我可以将标题中的所有内容移动,但不能移动到一个标题中。我个人从未尝试过这样做。但是,您可以在github上检查执行此操作的开源项目。你可以从他们的项目中得到很好的指导。我知道2,有pybind11和catch2是只头文件的库。这里有一个很好的逐行解释参考:我发现在目标链接库中,如果只头文件的库是接口,那么在构建项目时,cmake不会检测库的头文件。严格地说,目标目录中“.”的作用域是否应该是公共的,而不是接口?从技术上讲,该目录中的文件包括该目录中的其他文件。我明白,实际上,这没有什么区别,因为你永远不会真正建立这个项目。我想,如果您添加了一个实现文件并将库更改为PUBLIC(仅限非标题),那么您可以少做一次更改。@ToddR如果库是“接口”,则该关键字只能是“接口”。
#include <project/folder1/file.hpp>