是否存在像BUILD_SHARED_LIBS这样的变量,但仅适用于单个目标(例如MyLib_BUILD_SHARED,其中MyLib是库)。
我知道我可以使用命令STATIC
中的DYNAMIC
或add_library
来手动确定库是静态的还是动态的,但是我希望用户可以设置一个选项而不是硬编码的解决方案。
此致, 莱克斯(Lehks)
答案 0 :(得分:1)
我不知道CMake中没有内置方法。使其成为一个选项,其优点是还可以记录用户的意图。
option(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ON)
然后根据设置的选项执行add_library
命令。
答案 1 :(得分:0)
我相信接受的答案并不完全准确,因为问题专门针对为单个目标设置此选项。通过将BUILD_SHARED_LIBS
作为可见选项,您可以默认控制所有库目标的STATIC
/ SHARED
属性。
的确,没有针对单个目标执行此操作的内置功能。您需要自己添加。类似于以下内容:
option(MyLib_SHARED_LIBS "" ON)
if (MyLib_SHARED_LIBS)
add_library(MyLib SHARED "")
else()
add_library(MyLib STATIC "")
endif()