c++ - CMake 不再查找静态 Boost 库

标签 c++ boost cmake

我正在从事一个依赖于 Boost 的大型 C++ 项目。该项目是在使用 CMake 的各种平台上构建的。在我的 Windows 机器上,我使用的是 CMake 2.8.9、Visual Studio 2010 和 Boost 1.50.0(从源代码构建)。

多年来,我一直在毫无问题地一起使用 CMake 和 Boost,Boost 版本最早是 1.33。 现在,CMake 突然找不到 Boost 库。我的机器上唯一发生变化的是我最近安装了 Visual Studio 2012,但我认为这与问题无关(另一方面,据我所知,这是 只有发生了变化)。

这是我用来调用 CMake 的命令行:

cmake ..\src -DBOOST_ROOT=..\..\boost -DQT_QMAKE_EXECUTABLE=..\..\qt-4.8.0\bin\qmake.exe

这曾经完美地工作,但现在输出:

-- Building for: Visual Studio 10
-- Check for working C compiler using: Visual Studio 10
-- Check for working C compiler using: Visual Studio 10 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 10
-- Check for working CXX compiler using: Visual Studio 10 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1191 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.50.0

  Boost include path: C:/franz/dev/boost

  The following Boost libraries could not be found:

          boost_date_time
          boost_filesystem
          boost_regex
          boost_system
          boost_thread

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.
Call Stack (most recent call first):
  CMakeLists.txt:114 (find_package)


-- Found OpenGL: opengl32
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - not found.
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt4: C:/franz/dev/qt-4.8.0/bin/qmake.exe (found version "4.8.0")
-- Configuring incomplete, errors occurred!

显然,它确实找到了我的 Boost 安装,因为它报告了正确的路径和版本号。

这里是C:\franz\dev\boost\stage\lib的内容:

08/18/2012  05:20 PM           360,294 libboost_chrono-vc100-mt-1_50.lib
08/18/2012  05:19 PM         1,529,418 libboost_chrono-vc100-mt-gd-1_50.lib
08/18/2012  05:20 PM           600,900 libboost_date_time-vc100-mt-1_50.lib
08/18/2012  05:19 PM         2,064,420 libboost_date_time-vc100-mt-gd-1_50.lib
08/18/2012  05:20 PM             5,478 libboost_exception-vc100-mt-1_50.lib
08/18/2012  05:19 PM            39,634 libboost_exception-vc100-mt-gd-1_50.lib
08/18/2012  05:20 PM           857,020 libboost_filesystem-vc100-mt-1_50.lib
08/18/2012  05:20 PM         4,289,814 libboost_filesystem-vc100-mt-gd-1_50.lib
08/18/2012  05:21 PM         5,811,696 libboost_graph-vc100-mt-1_50.lib
08/18/2012  05:14 PM        14,388,384 libboost_graph-vc100-mt-gd-1_50.lib
08/18/2012  05:21 PM           406,742 libboost_iostreams-vc100-mt-1_50.lib
08/18/2012  05:14 PM         1,260,032 libboost_iostreams-vc100-mt-gd-1_50.lib
08/18/2012  05:21 PM         6,886,724 libboost_locale-vc100-mt-1_50.lib
08/18/2012  05:14 PM        22,056,376 libboost_locale-vc100-mt-gd-1_50.lib
08/18/2012  05:22 PM         1,395,280 libboost_math_c99-vc100-mt-1_50.lib
08/18/2012  05:15 PM         4,095,066 libboost_math_c99-vc100-mt-gd-1_50.lib
08/18/2012  05:23 PM         1,410,172 libboost_math_c99f-vc100-mt-1_50.lib
08/18/2012  05:15 PM         4,113,830 libboost_math_c99f-vc100-mt-gd-1_50.lib
08/18/2012  05:23 PM         1,376,096 libboost_math_c99l-vc100-mt-1_50.lib
08/18/2012  05:15 PM         4,056,498 libboost_math_c99l-vc100-mt-gd-1_50.lib
08/18/2012  05:22 PM         5,832,008 libboost_math_tr1-vc100-mt-1_50.lib
08/18/2012  05:15 PM        14,472,628 libboost_math_tr1-vc100-mt-gd-1_50.lib
08/18/2012  05:22 PM         6,115,696 libboost_math_tr1f-vc100-mt-1_50.lib
08/18/2012  05:15 PM        15,004,588 libboost_math_tr1f-vc100-mt-gd-1_50.lib
08/18/2012  05:22 PM         5,779,786 libboost_math_tr1l-vc100-mt-1_50.lib
08/18/2012  05:15 PM        14,362,836 libboost_math_tr1l-vc100-mt-gd-1_50.lib
08/18/2012  05:25 PM           215,242 libboost_prg_exec_monitor-vc100-mt-1_50.lib
08/18/2012  05:18 PM         1,226,324 libboost_prg_exec_monitor-vc100-mt-gd-1_50.lib
08/18/2012  05:23 PM         6,425,284 libboost_program_options-vc100-mt-1_50.lib
08/18/2012  05:16 PM        20,124,142 libboost_program_options-vc100-mt-gd-1_50.lib
08/18/2012  05:24 PM         5,722,808 libboost_python-vc100-mt-1_50.lib
08/18/2012  05:17 PM        21,947,816 libboost_python-vc100-mt-gd-1_50.lib
08/18/2012  05:24 PM            83,144 libboost_random-vc100-mt-1_50.lib
08/18/2012  05:17 PM           406,482 libboost_random-vc100-mt-gd-1_50.lib
08/18/2012  05:21 PM        10,473,946 libboost_regex-vc100-mt-1_50.lib
08/18/2012  05:13 PM        34,561,778 libboost_regex-vc100-mt-gd-1_50.lib
08/18/2012  05:25 PM        11,650,480 libboost_serialization-vc100-mt-1_50.lib
08/18/2012  05:17 PM        30,379,304 libboost_serialization-vc100-mt-gd-1_50.lib
08/18/2012  05:25 PM           987,732 libboost_signals-vc100-mt-1_50.lib
08/18/2012  05:18 PM         3,898,264 libboost_signals-vc100-mt-gd-1_50.lib
08/18/2012  05:20 PM            83,032 libboost_system-vc100-mt-1_50.lib
08/18/2012  05:19 PM           415,800 libboost_system-vc100-mt-gd-1_50.lib
08/18/2012  05:25 PM        10,058,306 libboost_test_exec_monitor-vc100-mt-1_50.lib
08/18/2012  05:18 PM        23,818,324 libboost_test_exec_monitor-vc100-mt-gd-1_50.lib
08/18/2012  05:26 PM           847,252 libboost_thread-vc100-mt-1_50.lib
08/18/2012  05:18 PM         2,633,358 libboost_thread-vc100-mt-gd-1_50.lib
08/18/2012  05:26 PM           178,456 libboost_timer-vc100-mt-1_50.lib
08/18/2012  05:18 PM           861,732 libboost_timer-vc100-mt-gd-1_50.lib
08/18/2012  05:26 PM        10,943,274 libboost_unit_test_framework-vc100-mt-1_50.lib
08/18/2012  05:18 PM        26,280,564 libboost_unit_test_framework-vc100-mt-gd-1_50.lib
08/18/2012  05:26 PM        46,920,182 libboost_wave-vc100-mt-1_50.lib
08/18/2012  05:19 PM        98,744,066 libboost_wave-vc100-mt-gd-1_50.lib
08/18/2012  05:25 PM         9,000,488 libboost_wserialization-vc100-mt-1_50.lib
08/18/2012  05:18 PM        20,631,532 libboost_wserialization-vc100-mt-gd-1_50.lib

正如我们所见,Boost 是使用多线程运行时使用 Visual Studio 2010 (vc100) 构建为静态库的。

这是当我指定 -DBoost_DEBUG=1 时 CMake 的输出:

-- Building for: Visual Studio 10
-- Check for working C compiler using: Visual Studio 10
-- Check for working C compiler using: Visual Studio 10 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 10
-- Check for working CXX compiler using: Visual Studio 10 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:566 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:568 ] Boost_USE_MULTITHREADED = TRUE
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:570 ] Boost_USE_STATIC_LIBS =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:572 ] Boost_USE_STATIC_RUNTIME =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:574 ] Boost_ADDITIONAL_VERSIONS =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:576 ] Boost_NO_SYSTEM_PATHS =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:644 ] Declared as CMake or Environmental Variables:
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:646 ]   BOOST_ROOT = ../../boost
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:648 ]   BOOST_INCLUDEDIR =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:650 ]   BOOST_LIBRARYDIR =
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:652 ] _boost_TEST_VERSIONS = 1.56.0;1.56;1.55.0;1.55;1.54.0;1.54;1.53.0;1.53;1.52.0;1.52;1.51.0;1.51;1.50.0;1.50;1.49.0;1.49;1.48.0;1.48;1.47.0;1.47;1.46.1;1.46.0;1.46
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:705 ] Include debugging info:
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:707 ]   _boost_INCLUDE_SEARCH_DIRS = ../../boost/include;../../boost;C:/boost/include;C:/boost;C:\Program Files (x86)/boost/include;C:\Program Files (x86)/boost;/sw/local/include
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:709 ]   _boost_PATH_SUFFIXES = boost-1_56_0;boost_1_56_0;boost-1_56;boost_1_56;boost-1_55_0;boost_1_55_0;boost-1_55;boost_1_55;boost-1_54_0;boost_1_54_0;boost-1_54;boost_1_54;boost-1_53_0;boost_1_53_0;boost-1_53;boost_1_53;boost-1_52_0;boost_1_52_0;boost-1_52;boost_1_52;boost-1_51_0;boost_1_51_0;boost-1_51;boost_1_51;boost-1_50_0;boost_1_50_0;boost-1_50;boost_1_50;boost-1_49_0;boost_1_49_0;boost-1_49;boost_1_49;boost-1_48_0;boost_1_48_0;boost-1_48;boost_1_48;boost-1_47_0;boost_1_47_0;boost-1_47;boost_1_47;boost-1_46_1;boost_1_46_1;boost-1_46_0;boost_1_46_0;boost-1_46;boost_1_46
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:734 ] location of version.hpp: C:/franz/dev/boost/boost/version.hpp
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:753 ] version.hpp reveals boost 1.50.0
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:785 ] guessed _boost_COMPILER = -vc100
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:795 ] _boost_MULTITHREADED = -mt
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:838 ] _boost_RELEASE_ABI_TAG = -
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:840 ] _boost_DEBUG_ABI_TAG = -gd
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:883 ] _boost_LIBRARY_SEARCH_DIRS = ../../boost/lib;../../boost/stage/lib;C:/franz/dev/boost/lib;C:/franz/dev/boost/../lib;C:/franz/dev/boost/stage/lib;C:/boost/lib;C:/boost;C:\Program Files (x86)/boost/boost_1_50_0/lib;C:\Program Files (x86)/boost/boost_1_50/lib;C:\Program Files (x86)/boost/lib;C:\Program Files (x86)/boost;/sw/local/lib
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:961 ] Searching for DATE_TIME_LIBRARY_RELEASE: boost_date_time-vc100-mt-1_50;boost_date_time-vc100-mt;boost_date_time-mt-1_50;boost_date_time-mt;boost_date_time
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:993 ] Searching for DATE_TIME_LIBRARY_DEBUG: boost_date_time-vc100-mt-gd-1_50;boost_date_time-vc100-mt-gd;boost_date_time-mt-gd-1_50;boost_date_time-mt-gd;boost_date_time-mt;boost_date_time
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:961 ] Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-vc100-mt-1_50;boost_filesystem-vc100-mt;boost_filesystem-mt-1_50;boost_filesystem-mt;boost_filesystem
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:993 ] Searching for FILESYSTEM_LIBRARY_DEBUG: boost_filesystem-vc100-mt-gd-1_50;boost_filesystem-vc100-mt-gd;boost_filesystem-mt-gd-1_50;boost_filesystem-mt-gd;boost_filesystem-mt;boost_filesystem
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:961 ] Searching for REGEX_LIBRARY_RELEASE: boost_regex-vc100-mt-1_50;boost_regex-vc100-mt;boost_regex-mt-1_50;boost_regex-mt;boost_regex
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:993 ] Searching for REGEX_LIBRARY_DEBUG: boost_regex-vc100-mt-gd-1_50;boost_regex-vc100-mt-gd;boost_regex-mt-gd-1_50;boost_regex-mt-gd;boost_regex-mt;boost_regex
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:961 ] Searching for SYSTEM_LIBRARY_RELEASE: boost_system-vc100-mt-1_50;boost_system-vc100-mt;boost_system-mt-1_50;boost_system-mt;boost_system
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:993 ] Searching for SYSTEM_LIBRARY_DEBUG: boost_system-vc100-mt-gd-1_50;boost_system-vc100-mt-gd;boost_system-mt-gd-1_50;boost_system-mt-gd;boost_system-mt;boost_system
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:961 ] Searching for THREAD_LIBRARY_RELEASE: boost_thread-vc100-mt-1_50;boost_thread-vc100-mt;boost_thread-mt-1_50;boost_thread-mt;boost_thread
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:993 ] Searching for THREAD_LIBRARY_DEBUG: boost_thread-vc100-mt-gd-1_50;boost_thread-vc100-mt-gd;boost_thread-mt-gd-1_50;boost_thread-mt-gd;boost_thread-mt;boost_thread
-- [ C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1107 ] Boost_FOUND = FALSE
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1191 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.50.0

  Boost include path: C:/franz/dev/boost

  The following Boost libraries could not be found:

          boost_date_time
          boost_filesystem
          boost_regex
          boost_system
          boost_thread

  No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
  directory containing Boost libraries or BOOST_ROOT to the location of
  Boost.
Call Stack (most recent call first):
  CMakeLists.txt:114 (find_package)


-- Found OpenGL: opengl32
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - not found.
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - found
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt4: C:/franz/dev/qt-4.8.0/bin/qmake.exe (found version "4.8.0")
-- Configuring incomplete, errors occurred!

这是顶层 CMakeLists.txt 文件中处理 Boost 的部分:https://github.com/jupiter-jazz/appleseed/blob/95b045bf06c731cd331d68f6c2515f1acefc1b42/src/CMakeLists.txt#L100

我也曾尝试指定 BOOST_LIBRARYDIR 而不是 BOOST_ROOT,但无济于事。

同样,这多年来一直在 Windows、Linux 和 Mac OS X 的许多变体上完美运行。我正在寻找它突然停止运行的原因。

最佳答案

在您的调试输出中,它看起来像 Boost_USE_STATIC_LIBS 未设置,但您正在寻找静态 boost 库。

尝试再次运行 CMake,但将 -DBoost_USE_STATIC_LIBS=ON 添加到命令中。

事实上,你的CMakeLists.txt wraps this in another variable USE_STATIC_BOOST .将其设置为 ON 应该具有相同的效果。

关于c++ - CMake 不再查找静态 Boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020736/

相关文章:

c++ - 无法使用 cmake + vcpkg 在 VS Code 中包含 C++ 项目的库

c++ - 如何将文本附加到 Windows 中的文件?

c++ - YACC/LEX yyparse() 循环问题

c++ - Boost.Tokenizer 如何不从标记中删除分隔符

c++ - boost geometry + WGS84,有经纬度,但不是高度?

java - 无法构建项目,出现错误 - 体系结构 x86_64 的 undefined symbol : "_JNI_CreateJavaVM"

c++ - "inline function need to be DEFINED in all tranlation units"背后的基本原理是什么?

c++ - 使用 true type 和 opengl core 的轮廓字体 (3.3)

c++ - enable_if 类型的大小未知

cmake - 适用于 Windows 和 Linux 编译的 Autotools 与 CMake