Visual C ++ 11在CMake生成的项目中找不到Boost unit_test_framework库

时间:2013-04-04 15:28:35

标签: visual-c++ boost cmake

我有一个使用CMake和Boost的C ++项目,在Linux下编译/链接没有任何问题。我正在努力通过Visual C ++ 2012将其移植到Windows。

我的CMake配置如下:

set(BOOST_ROOT ${DEPENDENCY_DIR}/boost/)
set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.53 COMPONENTS system date_time chrono serialization filesystem program_options random thread regex unit_test_framework)

message(STATUS "Boost Version:" ${Boost_VERSION})
message(STATUS "Boost Include Dirs:" ${Boost_INCLUDE_DIR})
message(STATUS "Boost Libraries:")
foreach(lib ${Boost_LIBRARIES})
        message(STATUS ${lib})
endforeach()

include_directories(${Boost_INCLUDE_DIR})

我在我的目标中使用target_link_libraries${Boost_LIBRARIES}。同样在message以上命令上显示所有找到的文件没有任何问题。

此外,所需的图书馆应显示libboost_unit_test_framework-vc110-mt-gd-1_53.lib

screenshot of library dependencies

然而,当我构建其中一个目标时,我得到了

2>LINK : fatal error LNK1104: cannot open file 'boost_unit_test_framework-vc110-mt-gd-1_53.lib'

我删除了另一个Boost库,从错误看,链接器似乎能够找到其他的。 (例如chronoserialization。)但错误消息有点不同。文件名前面有 lib

2>LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc110-mt-gd-1_53.lib'

为什么VC ++会为unit_test_framework查找前缀为 boost 而不是 libboost 的文件?

1 个答案:

答案 0 :(得分:0)

好的,检查两件事:

  • 确保文件实际存在于给定路径中,并且您具有读取权限。
  • 确保使用32位.LIB进行32位构建,使用64位.LIB进行64位LIB。