CMake:找不到组件包含目录

问题描述

我一直在研究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下。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...