链接提升与cmake和visual studio 2015

时间:2017-04-18 08:54:10

标签: visual-studio boost visual-studio-2015 cmake

当我尝试使用cmake链接boost以生成visual studio 2015文件时,cmake会生成如下的库路径:

optimized;D:/work/libs/boost_1_63_0/lib64-msvc-14.0/boost_regex-vc140-mt-1_63.lib;debug;D:/work/libs/boost_1_63_0/lib64-msvc-14.0/boost_regex-vc140-mt-gd-1_63.lib;[...]

但是visual studio尝试将libboost_regex-vc140-mt-gd-1_63.lib与使用此路径的cmake文件生成的解决方案文件相关联。

cmake文件的相关部分:

target_compile_definitions(${PROJECT_NAME} [...] BOOST_ALL_DYN_LINK)
message("${Boost_LIBRARIES}")
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})

上面的optimizeddebug路径来自此处的message(...)命令,而visual studio输出

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc140-mt-gd-1_63.lib'

哪个是正确的,因为它应该使用boost_regex-vc140-mt-gd-1_63.lib,这是${Boost_LIBRARIES}中的绝对路径。

奇怪的是,在set(Boost_USE_STATIC_LIBS ON)之前何时使用find_package,问题恰恰相反,cmake找到libboost_个文件,而VS期望boost_文件。

1 个答案:

答案 0 :(得分:0)

看来,主要的问题是,我链接到我的图书馆的另一个图书馆是静态链接的。

当我使用boost动态链接我的项目时,这很有效,但链接其他库现在找不到所需的静态版本,因为主项目没有将静态版本包含到其路径中(这是我的正确行为)虽然链接库似乎不包含从boost静态链接的符号,但只是引用它们以便稍后以某种方式链接。

目前,它确保所有部件都在不混合的情况下连接静态或动态版本。

它可能适用于在路径中同时使用两者,但我想这会使哪个库用于哪个函数会让人感到困惑。