首页 > 解决方案 > 如何通过 CMake 获取 STATIC 库默认值

问题描述

我有一个项目集成了bt第三方项目。其中一个使用

add_library(json 
  dist/jsoncpp.cpp
  dist/json/json.h
  dist/json/json-forwards.h)

没有STATICSHARED使用过。当我不将其构建为第三方库而是直接构建它时,它将生成一个静态库。但是当我将它作为第三方集成时,它会产生一个共享库。这将导致如下错误:

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”

我知道添加STATICadd_library()将解决问题。但我使用git submodule来管理它。我不想每次都分叉项目并同步。

有没有办法让它成为上层 CMakeLists.txt 中的静态库?

标签: c++cmake

解决方案


您需要做的就是将变量BUILD_SHARED_LIBS在官方 CMake 文档中了解它)添加到您的 CMake 调用中,将其设置为FALSE,0OFF.

因此,如果您的CMakeLists.txt文件位于父目录中,则需要使用以下命令调用 CMake:

cmake -DBUILD_SHARED_LIBS=OFF ..

你可以从你的文件中强制它,CMakeLists.txt但我不建议你这样做,因为如果你的 CMake 工具链文件期待不同的东西,它会产生问题。


推荐阅读