如何只为依赖建立一个目标?

时间:2019-01-03 19:10:52

标签: c++ visual-studio cmake

我想使用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)

2 个答案:

答案 0 :(得分:1)

我终于想出了办法。

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)

答案 1 :(得分:0)

我建议您改用vcpkg或conan来解决依赖库的问题,这种方法更加简洁,除了只包含标头的库之外,效果很好。

您当然可以手动执行此操作,但比松开漂亮的cmake设置更容易。