CMake中能否在add_library后将库标记为静态库?
能否在CMake中先创建默认库再改为静态库?
答案是不能直接修改已创建目标的类型,但可以通过调整配置或修改代码实现类似效果,具体细节如下:
首先明确:
add_library(mylib mylib.c)这种不带类型的写法,实际创建的库类型由全局变量BUILD_SHARED_LIBS控制:- 当
BUILD_SHARED_LIBS设为ON时,默认生成共享(动态)库 - 当
BUILD_SHARED_LIBS设为OFF时,默认生成静态库
- 当
一旦用
add_library创建了mylib目标,它的库类型就被固定了,无法通过后续命令(比如set_target_properties)修改——CMake会将目标类型视为只读属性,强行修改会触发错误。想要生成静态库,有两种靠谱的方式:
- 在
add_library(mylib mylib.c)之前添加配置:set(BUILD_SHARED_LIBS OFF),让默认行为变为创建静态库 - 直接修改
add_library调用,明确指定静态库类型:add_library(mylib STATIC mylib.c)
- 在
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

