我如何在Windows的单个项目中同时将静态和动态Boost库与FindBoost一起使用?

时间:2019-08-07 16:19:30

标签: c++ boost cmake

我有一个CMake项目,在Windows上有多个子项目。大约10个子项目使用Boost动态库,而4个使用静态库。我想知道什么是使用两个库版本而没有太多麻烦的最佳方法。

当前,我有一个名为[ExternalLibrary]Import.cmake的文件。例如,我有BoostImport.cmakeJsonCppImport.cmakeJsonCppImport.cmake如下所示:

find_package(JsonCpp REQUIRED PATHS ${CONAN_JSONCPP_ROOT})

文件包含其他行,它们执行无关的操作。基本上,我想要一个用于查找和加载所有外部依赖项并执行其他操作(例如设置变量或将这些库复制到文件夹)的文件。这些文件在CMake启动配置过程时加载一次。直到我开始对Boost进行相同操作之前,此方法均能正常工作。 Boost看起来像这样:

set(gBoostMajor 1)
set(gBoostMinor 68)
set(gBoostRevision 0)
set(gBoostLibSuffix ${gBoostMajor}_${gBoostMinor})

find_package(Boost REQUIRED COMPONENTS date_time filesystem log program_options system thread regex) 

如您所见,在执行DBOOST_ALL_DYN_LINK之前,我必须设置诸如find_package之类的标志。但是,链接模式是在我的CMakeList.txt文件中为每个子项目确定的。显然,这是行不通的。

要恢复我的问题,我希望能够决定我在每个子项目的CMakeList.txt文件中想要的Boost链接模式。但是,我不需要在所有find_package文件中都调用CMakeList.txt。还有其他选择吗?有没有一种方法可以导入Boost的静态和动态版本,并确定调用target_link_libraries时需要的链接版本?

谢谢

0 个答案:

没有答案
相关问题