如何只构建一个依赖项目标

How to build only one target for dependency?

本文关键字:一个 依赖 项目 目标 构建      更新时间:2023-10-16

我想使用CMake + Visual Studio在Windows下构建一个应用程序,其中包含许多依赖项,例如zlib。它们都是静态库。

我已经尝试了ADD_SUBDIRECTORY并且效果很好,但是不是仅根据目标(zlibstatic)构建,而是构建了所有这些目标。

如何删除未使用的目标(及其解决方案)或仅选择一个?主要是我正在寻找功能来定义仅需要的目标。

我的部分CMakeLists.txt

ADD_SUBDIRECTORY("${CMAKE_CURRENT_SOURCE_DIR}/deps/zlib")
TARGET_INCLUDE_DIRECTORIES(MyProject PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps/zlib")
TARGET_LINK_LIBRARIES(MyProject zlibstatic)

我终于想出了该怎么做。

MyProject
├───build  <- here I call cmake
├───deps
│   └───zlib
│       └───CMakeLists.txt
├───inc
├───src
└───CMakeLists.txt
# Include project but remove all tartgets
ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/deps/zlib EXCLUDE_FROM_ALL)
# Use only specific one target
ADD_DEPENDENCIES(MyProject zlibstatic)
# Include dirs from zlib source directory and from output directory becuse it generates some headers
TARGET_INCLUDE_DIRECTORIES(MyProject PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/deps/zlib
    ${CMAKE_CURRENT_BINARY_DIR}/deps/zlib
)
# Just to create beautiful structure in project tree
SET_PROPERTY(TARGET zlibstatic PROPERTY FOLDER Deps)
# Link after all
TARGET_LINK_LIBRARIES(MyProject zlibstatic)

我建议您使用 vcpkg 或 conan 来解决您的依赖库问题,这要干净得多,并且除了仅标头库外运行良好。

您可以手动执行此操作,但比丢失漂亮的 cmake 设置。

相关文章: