我喜欢添加带有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.hpp>
包含在内,它就不会在测试项目中找到它。
实际上,我用boost::operators<T>
扩展了一个类,奇怪的是,我的IDE(CLion)让我跳到了那个源文件。
include_directories
CMake命令为当前目录及其子目录添加include目录。由于您在测试项目中得到了错误,并在主项目中使用了include_directories
,我想问题在于您有单独的目录用于这些目录,例如:
src/
CMakeLists.txt - include_directories used here
test/
test.cc - no effect on this file
如果是这种情况,您可以将include_directories
移动到它们的公共父目录,或者使用可以传播公共INCLUDE_DIRECTORIES
属性的target_include_directories
。
您还可以通过在make命令中添加VERBOSE=1
来查看传递给编译器的命令:
make VERBOSE=1
这显示了通过-I...
选项传递给编译器的include目录。