c++ - 如何通过 CMake 获取 STATIC 库默认值
问题描述
我有一个项目集成了bt第三方项目。其中一个使用
add_library(json
dist/jsoncpp.cpp
dist/json/json.h
dist/json/json-forwards.h)
没有STATIC
或SHARED
使用过。当我不将其构建为第三方库而是直接构建它时,它将生成一个静态库。但是当我将它作为第三方集成时,它会产生一个共享库。这将导致如下错误:
Linking CXX shared library ThirdParty\ozz-animation\src\animation\offline\tools\json\json_d.dll
LINK : fatal error LNK1104: can't open the file “ThirdParty\ozz-animation\src\animation\offline\tools\json\json_d.lib”
我知道添加STATIC
到add_library()
将解决问题。但我使用git submodule来管理它。我不想每次都分叉项目并同步。
有没有办法让它成为上层 CMakeLists.txt 中的静态库?
解决方案
您需要做的就是将变量BUILD_SHARED_LIBS
(在官方 CMake 文档中了解它)添加到您的 CMake 调用中,将其设置为FALSE
,0
或OFF
.
因此,如果您的CMakeLists.txt
文件位于父目录中,则需要使用以下命令调用 CMake:
cmake -DBUILD_SHARED_LIBS=OFF ..
你可以从你的文件中强制它,CMakeLists.txt
但我不建议你这样做,因为如果你的 CMake 工具链文件期待不同的东西,它会产生问题。
推荐阅读
- performance - 浏览器中的内存使用如何处理图像 - 我可以做一个大精灵吗?
- numpy - 将数组与自身连接 n 次
- django - 尝试在 docker-machine cookiecutter-django 中运行 docker-compose 时出现“关系不存在”错误
- sql - 包含其他子集的 SQL 集问题
- php - 如何在实时服务器上执行 Laravel(电子邮件)作业
- javascript - 使用带有条件javascript的地图从数组中提取id
- python - 提供关键字参数后可以给出 *args 吗?
- sql - SSRS 报告中的 TM 符号字体问题
- vim - Vim 拼写检查不适用于文本文件
- ruby-on-rails - 尝试在 mac 上运行 rails 应用程序时出错