C++ 将cmake headerfile boost.hpp包含在cmake中

C++ 将cmake headerfile boost.hpp包含在cmake中,c++,boost,cmake,C++,Boost,Cmake,我喜欢用cmake添加boost/operators.hpp 来自CMake的FindBoost文档: find_package(Boost 1.36.0) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) add_executable(foo foo.cc) endif() 所以我补充说 find_package(Boost 1.60.0) if (Boost_FOUND) include_direct

我喜欢用cmake添加
boost/operators.hpp

来自CMake的FindBoost文档:

 find_package(Boost 1.36.0)
 if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(foo foo.cc)
 endif()
所以我补充说

find_package(Boost 1.60.0)
if (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})

    add_library(core ${core_SRCS})
    add_executable(app main.cpp)
    target_link_libraries(app core)

endif ()
消息的输出:

-- Boost version: 1.60.0
-- BOOST_ROOT=~/Projects/ClionProjects/.repo/boost_1_60_0
-- Boost_DIR=Boost_DIR-NOTFOUND
-- Boost_INCLUDE_DIR=/home/dornathal/Projects/ClionProjects/.repo/boost_1_60_0
但是它会生成(我可以运行程序和测试),但是只要我尝试包含
#include
,它就不会在测试项目中找到它


实际上,我通过
boost::operators
扩展了一个类,奇怪的是,我的IDE(CLion)允许我跳转到该源文件。

使用
include\u目录
CMake命令为当前目录及其子目录添加include目录。由于您在测试项目中得到了错误,并且在主项目中使用了
include_目录
,因此我猜问题在于您对这些目录有单独的目录,例如:

src/
  CMakeLists.txt - include_directories used here
test/
  test.cc - no effect on this file
在这种情况下,您可以将
include_目录
移动到它们的公共父目录,或者使用可以传播公共
include_目录
属性的

您还可以通过向make命令添加
VERBOSE=1
来查看传递给编译器的命令:

make VERBOSE=1

这显示了哪些include目录通过
-I..
选项传递给编译器。

操作。hpp
操作符不同。hpp
。好的,修复了我的帖子,当然我在包含时使用了operators.hpp。没有“当然”的意思。我们无法阅读您的真实代码。我认为如果编译在include语句上失败,那么发布完整的类有点冗长。所有可以修复的东西都应该在cmake构建过程中。至少我这么认为,但如果需要,我可以添加该类。
Boost\u INCLUDE\u DIRS
变量的内容是什么(例如,如果使用
message()
打印它)?而且,在生成的项目中,是否指定了错误的Boost路径,或者根本没有?