我正在尝试在Windows上构建Bytecoin源代码,并遇到了CMake和Boost库的问题。首先,我尝试获取Boost 1.55并自行编译。由于某些原因,其中有一两个库在最后没有编译成功,但我认为CMake至少会识别已编译的库。相反,在尝试加载CMake项目时,我收到以下错误消息:
错误:无法找到所请求的Boost库。Boost版本:1.55.0 Boost包含路径:C:/Program Files/boost/boost_1_55_0 找不到以下Boost库:
boost_system boost_filesystem boost_thread boost_date_time boost_chrono boost_regex
boost_serialization boost_program_options 找不到任何Boost库。您可能需要将BOOST_LIBRARYDIR设置为包含Boost库的目录或将BOOST_ROOT设置为Boost的位置。
然后我尝试向find_package()添加HINT。它尝试解析一个奇怪的路径,不确定它在哪里执行此操作。
然后我尝试向find_package()添加HINT。它尝试解析一个奇怪的路径,不确定它在哪里执行此操作。
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273 (if): Syntax error in cmake code at
C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273
when parsing string
${Boost_C:/PROGRAM FILES/BOOST/BOOST_1_55_0_LIBRARY_RELEASE}
阅读了一些关于此事的SO答案后,我添加了环境变量:
C:\Users\Misha>set
BOOST_INCLUDEDIR=C:\local\boost_1_55_0 BOOST_LIBRARYDIR=C:\local\boost_1_55_0\lib32-msvc-12.0 BOOST_ROOT=C:\local\boost_1_55_0\boost
此时,我尝试使用预编译库,但没有效果。
CMkeLists.txt
find_package(Boost 1.55 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options)
#find_package(Boost 1.55 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options HINT "C:/Program Files/boost/boost_1_55_0")
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
if (MINGW)
set(Boost_LIBRARIES "${Boost_LIBRARIES};ws2_32;mswsock")
elseif (APPLE)
set(Boost_LIBRARIES "${Boost_LIBRARIES}")
elseif (NOT MSVC)
set(Boost_LIBRARIES "${Boost_LIBRARIES};rt")
endif ()
我对CMake不太熟悉,所以可能只是一个简单的修复。我只是看不到它。
find_package()
之前插入set(Boost_DEBUG on)
并重新运行 cmake。在调试模式下,将显示所有搜索到的库。检查所有这些库是否存在于您分配给变量BOOST_LIBRARYDIR
的目录下。HINT
选项与您的问题无关,因为它用于Config
模式的 find_package,但您使用的是Module
模式 (FindBoost.cmake
)。 - Tsyvarev正在查找<component>_LIBRARY_RELEASE:
,其中会给出精确的文件名(component 是你在find_package()
中指定的组件)。 - TsyvarevBOOST_1_55_0_LIBRARY_RELEASE
的错误让我想到 cmake 在某种程度上将1.55
视为 Boost 库,就好像它是COMPONENTS
列表的一部分。我不认为你做错了什么,但也许可以尝试从find_package()
中删除1.55
参数。 - Stuart Berg