说明:如果以下设置是一种可重新实现的方法,那么我的问题主要是,当我运行 ninja install时,如何最好地将公共头文件添加到.lib中? ,因为我的解决方案目前不这样做。
关于如何以不同方式做事的例子很多,许多似乎互相矛盾,使我更加困惑。
我正在尝试更换内部构建系统,并用CMake替换它。代码库由许多不同的组件/库组成,例如OS /平台抽象,网络,功能等。在始终将其编译为一个大代码库之前,因此运行clean会删除所有内容并重建所有依赖项。
现在涉及到我难以理解如何在CMake中实现现代智能方式的部分。
忽略了需要在顶层使用依赖链工具这一事实,我的想法是按照隔离库的运行顺序,以库的顺序构建组件/库,而对顶层没有依赖性。 然后,每个隔离的构建运行都将使用其依赖项(例如仅用于OS抽象库的Windows API)进行构建,然后在其上运行install和export。
如果我具有操作系统抽象文件夹结构
OSabstraction/
includes/
OSabstraction/
abstraction.h
src/
abstraction.cpp
CMakeLists.txt
我的CMakeLists是
cmake_minimum_required(VERSION 3.12)
project(OSabstraction LANGUAGES CXX)
add_library(abstraction)
target_sources(abstraction
PRIVATE
src/abstraction.cpp
)
target_include_directories(abstraction
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/includes/>
$<INSTALL_INTERFACE:include>
)
install(
TARGETS abstraction
EXPORT abstraction-export
ARCHIVE DESTINATION lib
)
我如何最好在其他许多内部项目中使用该库?实际上,这个库要大很多倍,所以对于大型项目,正确的方法是什么?
编辑:我尝试遵循Pablo Arias' guide on how to do CMake Right,但对于通过.lib文件导出获取我的头文件,我不确定build_interface和install_interface生成器如何工作。