如何只构建一个依赖项目标
How to build only one target for dependency?
我想使用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 设置。
相关文章:
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 当基类是依赖类型时,这是一个缺陷吗
- Makefile 创建两个库 - 一个依赖于另一个
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- 在 NDK 上编译两个带有 gradle 的项目,其中一个依赖于另一个的二进制文件
- 如何 G++ 编译另一个目录中具有依赖项的.cpp文件
- 我正在尝试SDL_DisplayFormat一个.png文件,我想,我可能缺少依赖项
- 执行CMAKE目标的输出作为另一个目标的依赖
- 如何从同一个头文件中定义 2 个类,而一个类依赖于另一个类
- 如何将所有依赖项和共享库编译为一个二进制文件
- Cmake构建一个共享库,其中包含其所有依赖关系
- 为 c++ 构建一个静态库,该库在内部依赖于第三方库
- 如何使用类型专用化模板方法,该类型本身就是一个模板,其中只有返回类型依赖于模板类型
- 如何制作一个不依赖msvc dll的win32应用程序
- 如何在另一个类函数中使用类,而不依赖于它在C++中的声明位置
- 如何只构建一个依赖项目标
- Microsoft Visual C++-编译一个没有依赖项的DLL
- 在"std::result_of<_Signature>::type"之前需要"typename",因为"std::result_of<_Signature>"是一个依赖范围
- 在“.”之前需要“类型名”,因为“.”是一个依赖范围
- 配置一个依赖于多个其他CMake项目的CMake项目