我想使用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)
答案 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设置更容易。