问题描述
我一直在研究CMake作为整合构建的工具,以便我们可以更轻松地进行跨平台(和跨IDE!)开发,但是我似乎在使用FindBoost时遇到了麻烦。请参阅下面的相关cmake文件:
message(STATUS "Entering setup_boost.cmake")
# CMake for setting up boost via find_package
set(BOOST_ROOT ${BOOST_DIR}) # Set to be my directory with boost headers + libraries.
set(Boost_DEBUG ON) # disable if you don't want debugging output for finding boost.
set(Boost_DETAILED_FAILURE_MESSAGE ON) # disable if you don't want detailed error messages when finding boost.
set(BOOST_INCLUDEDIR "${BOOST_ROOT}/include")
set(BOOST_LIBRARYDIR "${BOOST_ROOT}/${C_BLD_RELDIR}/lib") # C_BLD_RELDIR is evaluated prior to this.
message(STATUS "Boost Root: '${BOOST_ROOT}'")
message(STATUS "Boost Include Directory: '${BOOST_INCLUDEDIR}'")
message(STATUS "Boost Library Directory: '${BOOST_LIBRARYDIR}'")
set(BOOST_COMPONENTS "filesystem")
message(STATUS "Using boost components: ${BOOST_COMPONENTS}")
set(Boost_NO_SYstem_PATHS ON)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost
${S_BOOST_V} EXACT
required
COMPONENTS ${BOOST_COMPONENTS}
)
根据我的研究,这应该可以工作,但是找不到文件系统包含目录。输出如下:
"C:\dev\Jetbrains\CLion 2019.3.4\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - NMake Makefiles" C:\path\to\project\Source
# This all seems pretty legit; correctly evaluates for the message commands.
-- Boost Root: 'C:\path\to\ThirdParty/boost/1.74.0'
-- Boost Include Directory: 'C:\path\to\ThirdParty/boost/1.74.0/include'
-- Boost Library Directory: 'C:\path\to\ThirdParty/boost/1.74.0/w2016/vs2019/release64mt/lib'
# I've removed the filepath + line numbers to the CMake messages below to keep things succinct.
# As above,this all seems correct.
-- _boost_TEST_VERSIONS = "1.74.0;1.74"
-- Boost_USE_MULTITHREADED = "TRUE"
-- Boost_USE_STATIC_LIBS = "ON"
-- Boost_USE_STATIC_RUNTIME = <unset>
-- Boost_ADDITIONAL_VERSIONS = <unset>
-- Boost_NO_SYstem_PATHS = "ON"
-- BOOST_ROOT = "C:\path\to\ThirdParty/boost/1.74.0"
-- ENV{BOOST_ROOT} = <unset>
-- BOOST_INCLUDEDIR = "C:\path\to\ThirdParty/boost/1.74.0/include"
-- ENV{BOOST_INCLUDEDIR} = <unset>
-- BOOST_LIBRARYDIR = "C:\path\to\ThirdParty/boost/1.74.0/w2016/vs2019/release64mt/lib"
-- ENV{BOOST_LIBRARYDIR} = <unset>
-- _boost_INCLUDE_SEARCH_Dirs = "C:\path\to\ThirdParty/boost/1.74.0/include;C:\path\to\ThirdParty/boost/1.74.0;NO_CMAKE_SYstem_PATH;NO_SYstem_ENVIRONMENT_PATH"
-- _boost_PATH_SUFFIXES = "boost-1_74_0;boost_1_74_0;boost/boost-1_74_0;boost/boost_1_74_0;boost-1_74;boost_1_74;boost/boost-1_74;boost/boost_1_74"
-- Boost_LIB_PREFIX = "lib"
-- Boost_NAMESPACE = "boost"
-- _boost_COMPILER = "-vc142;-vc141;-vc140" (guessed)
-- _boost_MULTITHREADED = "-mt"
-- _boost_ARCHITECTURE_TAG = "" (detected)
-- _boost_RELEASE_ABI_TAG = "-"
-- _boost_DEBUG_ABI_TAG = "-gd"
# This is where it gets shonky. Notice all the 'Boost_INCLUDE_DIR-NOTFOUND' here
-- _boost_LIBRARY_SEARCH_Dirs_RELEASE =
C:\path\to\ThirdParty/boost/1.74.0/w2016/vs2019/release64mt/lib
C:\path\to\ThirdParty/boost/1.74.0/lib;
C:\path\to\ThirdParty/boost/1.74.0/stage/lib;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.2;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.1;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.0;
Boost_INCLUDE_DIR-NOTFOUND/lib;
Boost_INCLUDE_DIR-NOTFOUND/../lib;
Boost_INCLUDE_DIR-NOTFOUND/stage/lib;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.2;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.1;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.0;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.2;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.1;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.0;
NO_CMAKE_SYstem_PATH;
NO_SYstem_ENVIRONMENT_PATH
-- _boost_LIBRARY_SEARCH_Dirs_DEBUG =
C:\path\to\ThirdParty/boost/1.74.0/w2016/vs2019/release64mt/lib;
C:\path\to\ThirdParty/boost/1.74.0/lib;
C:\path\to\ThirdParty/boost/1.74.0/stage/lib;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.2;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.1;
C:\path\to\ThirdParty/boost/1.74.0/lib64-msvc-14.0;
Boost_INCLUDE_DIR-NOTFOUND/lib;
Boost_INCLUDE_DIR-NOTFOUND/../lib;
Boost_INCLUDE_DIR-NOTFOUND/stage/lib;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.2;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.1;
Boost_INCLUDE_DIR-NOTFOUND/../lib64-msvc-14.0;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.2;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.1;
Boost_INCLUDE_DIR-NOTFOUND/lib64-msvc-14.0;
NO_CMAKE_SYstem_PATH;
NO_SYstem_ENVIRONMENT_PATH
-- Searching for FILESYstem_LIBRARY_RELEASE:
libboost_filesystem-vc142-mt-;
libboost_filesystem-vc142-mt;
libboost_filesystem-vc142-mt;
libboost_filesystem-vc141-mt-;
libboost_filesystem-vc141-mt;
libboost_filesystem-vc141-mt;
libboost_filesystem-vc140-mt-;
libboost_filesystem-vc140-mt;
libboost_filesystem-vc140-mt;
libboost_filesystem-mt-;
libboost_filesystem-mt;
libboost_filesystem-mt;
libboost_filesystem-mt;
libboost_filesystem;
libboost_filesystem-vc142-mt-s-;
libboost_filesystem-vc142-mt-s;
libboost_filesystem-vc142-mt-s;
libboost_filesystem-vc141-mt-s-;
libboost_filesystem-vc141-mt-s;
libboost_filesystem-vc141-mt-s;
libboost_filesystem-vc140-mt-s-;
libboost_filesystem-vc140-mt-s;
libboost_filesystem-vc140-mt-s;
libboost_filesystem-mt-s-;
libboost_filesystem-mt-s;
libboost_filesystem-mt-s
-- Searching for FILESYstem_LIBRARY_DEBUG:
libboost_filesystem-vc142-mt-gd-;
libboost_filesystem-vc142-mt-gd;
libboost_filesystem-vc142-mt-gd;
libboost_filesystem-vc141-mt-gd-;
libboost_filesystem-vc141-mt-gd;
libboost_filesystem-vc141-mt-gd;
libboost_filesystem-vc140-mt-gd-;
libboost_filesystem-vc140-mt-gd;
libboost_filesystem-vc140-mt-gd;
libboost_filesystem-mt-gd-;
libboost_filesystem-mt-gd;
libboost_filesystem-mt-gd;
libboost_filesystem-mt;
libboost_filesystem;
libboost_filesystem-vc142-mt-s-gd-;
libboost_filesystem-vc142-mt-s-gd;
libboost_filesystem-vc142-mt-s-gd;
libboost_filesystem-vc141-mt-s-gd-;
libboost_filesystem-vc141-mt-s-gd;
libboost_filesystem-vc141-mt-s-gd;
libboost_filesystem-vc140-mt-s-gd-;
libboost_filesystem-vc140-mt-s-gd;
libboost_filesystem-vc140-mt-s-gd;
libboost_filesystem-mt-s-gd-;
libboost_filesystem-mt-s-gd;
libboost_filesystem-mt-s-gd
CMake Error at C:/dev/Jetbrains/CLion 2019.3.4/bin/cmake/win/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
Could NOT find Boost (missing: Boost_INCLUDE_DIR filesystem) (required is
exact version "1.74.0")
我已验证filesystem
目录位于在include目录中。相关内容的文件路径如下:
C:\path\to
|-- Project
| `-- Source
| |-- CMake (directory with .cmake files)
| | `-- setup_boost.cmake
| |
| `-- CMakeLists.txt
|
`-- ThirdParty
`-- boost
`-- 1.74.0
|-- include
| |-- filesystem (filesystem directory with contents)
| |
| |-- filesystem.hpp
| `-- version.hpp
|
`-- w2016
|-- vs2019/release64mt/lib
| |-- cmake (bunch of cmake files)
| `-- libboost_filesystem-vc142-mt-s-x64-1_74.lib
|
`-- BUILD_BOOST_WIN.txt (build instructions for vs2019 builds)
有人知道我要怎么做吗?我在某处缺少某些配置选项吗?输出看起来好像找到了正确的 libraries ,但是没有找到filesystem
include目录,即使它在那里。
解决方法
发现了问题。长版本是我没有与先前版本的boost相同的文件系统结构。
简短的版本是所有包含内容都必须相对于include/boost
,而我没有其中的boost
部分;一切都直接放在include
下。