【发布时间】:2013-04-04 15:28:35
【问题描述】:
我有一个使用 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。
但是,当我构建目标之一时,我得到了
2>LINK : fatal error LNK1104: cannot open file 'boost_unit_test_framework-vc110-mt-gd-1_53.lib'
我删除了另一个 Boost 库,从错误中链接器似乎能够找到其他库。 (如chrono 或serialization。)但错误信息有点不同。文件名前面有 lib。
2>LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc110-mt-gd-1_53.lib'
为什么 VC++ 会为 unit_test_framework 寻找前缀为 boost 而不是 libboost 的文件?
【问题讨论】:
-
你试过
add_definitions(-DBOOST_ALL_NO_LIB)禁用boost's auto-linking feature
标签: visual-c++ boost cmake