C++ CMake 不再找到静态 Boost 库
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12020736/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
CMake no longer finds static Boost libraries
提问by Fran?ois Beaune
I am working on a large C++ project that relies on Boost. The project is built on a variety of platforms using CMake. On my Windows machine, I am using CMake 2.8.9, Visual Studio 2010 and Boost 1.50.0 (built from sources).
我正在开发一个依赖 Boost 的大型 C++ 项目。该项目使用 CMake 构建在各种平台上。在我的 Windows 机器上,我使用 CMake 2.8.9、Visual Studio 2010 和 Boost 1.50.0(从源代码构建)。
I have been using CMake and Boost together for years without problem, with Boost versions as old as 1.33. Now, suddenly CMake no longer finds the Boost libraries. The only thing that has changed on my machine is that I recently installed Visual Studio 2012, but I don't think this has anything to do with the problem (on the other hand and as far as I remember, this is the onlything that has changed).
我多年来一直在使用 CMake 和 Boost 没有问题,Boost 版本早至 1.33。现在,突然 CMake 不再找到 Boost 库。我的机器上唯一改变的是我最近安装了 Visual Studio 2012,但我认为这与问题没有任何关系(另一方面,据我所知,这是唯一的事情已经改变)。
Here is the command line I am using to invoke CMake:
这是我用来调用 CMake 的命令行:
cmake ..\src -DBOOST_ROOT=..\..\boost -DQT_QMAKE_EXECUTABLE=..\..\qt-4.8.0\bin\qmake.exe
This used to work flawlessly, but it now outputs:
这曾经完美无缺,但现在输出:
-- 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!
Apparently, it didfind my Boost installation as it reports the correct path and version number.
显然,它确实找到了我的 Boost 安装,因为它报告了正确的路径和版本号。
Here is the content of C:\franz\dev\boost\stage\lib
:
以下是内容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
As we can see, Boost was built as static libraries using Visual Studio 2010 (vc100) using the multithreaded runtime.
正如我们所见,Boost 是使用 Visual Studio 2010 (vc100) 使用多线程运行时构建为静态库的。
Here is the output of CMake when I specify -DBoost_DEBUG=1
:
这是我指定时 CMake 的输出-DBoost_DEBUG=1
:
-- 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!
Here is the section in the top level CMakeLists.txt file that deals with Boost: https://github.com/jupiter-jazz/appleseed/blob/95b045bf06c731cd331d68f6c2515f1acefc1b42/src/CMakeLists.txt#L100
这是处理 Boost 的顶级 CMakeLists.txt 文件中的部分:https: //github.com/jupiter-jazz/appleseed/blob/95b045bf06c731cd331d68f6c2515f1acefc1b42/src/CMakeLists.txt#L100
I have also tried to specify BOOST_LIBRARYDIR
instead of BOOST_ROOT
, to no avail.
我也尝试指定BOOST_LIBRARYDIR
而不是BOOST_ROOT
,但无济于事。
Again, this has been working flawlessly for years on many variants of Windows, Linux and Mac OS X. I am looking for the reason why it suddently stopped working.
同样,多年来它在 Windows、Linux 和 Mac OS X 的许多变体上一直完美无缺。我正在寻找它突然停止工作的原因。
回答by Fraser
In your debug output, it looks like Boost_USE_STATIC_LIBS
is unset, but yet you're looking for the static boost libs.
在您的调试输出中,它看起来像是Boost_USE_STATIC_LIBS
未设置,但您正在寻找静态 boost 库。
Try running CMake again but with -DBoost_USE_STATIC_LIBS=ON
added to the command.
尝试再次运行 CMake,但-DBoost_USE_STATIC_LIBS=ON
添加到命令中。
In fact, your CMakeLists.txt wraps this in another variable USE_STATIC_BOOST
. Setting that to ON
should have the same effect.
事实上,您的CMakeLists.txt 将其包装在另一个变量中USE_STATIC_BOOST
。将其设置为ON
应该具有相同的效果。