我在使用CMakeLists.txt将Boost Header文件包含到我的测试项目中。 我的some.cpp可以包含此头文件,没有出现任何错误,但我无法运行,因为该头文件显然依赖于其他Boost头文件,而且找不到所需的文件。 我的文件位于cpp文件夹中,而boost文件位于(C:\boost)的子目录中。
"RequiredHeader"中的包含文件,编译器正在查找:
..\src\main\cpp\boost\boost\AnotherHeader.hpp.
CMakeLists.txt (Boost部分)
"RequiredHeader"中的包含文件,编译器正在查找:
..\src\main\cpp\boost\boost\AnotherHeader.hpp.
CMakeLists.txt (Boost部分)
# ADD BOOST
message("Import Boost...\n")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_INCLUDE_DIRS C:/boost_1_64_0/boost)
find_package(Boost 1.64.0)
if(Boost_FOUND)
message("Boost found! Link libraries...\n")
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(myDependantLib ${Boost_LIBRARIES})
endif()
非常感谢您的帮助!
更新的问题:
如何告诉CMake我的Boost头文件在哪里,因为BOOST_ROOT设置后它仍然找不到正确的位置?
更新的CMakeLists.txt文件
# ADD BOOST
message("Add boost...\n")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(BOOST_ROOT C:/boost_1_64_0)
set(BOOST_INCLUDE_DIR C:/boost_1_64_0/boost)
FIND_PACKAGE(Boost 1.64.0 COMPONENTS foreach REQUIRED)
if(Boost_FOUND)
message("Boost found! Link libraries...\n")
target_link_libraries(calculator LINK_PUBLIC ${Boost_LIBRARIES})
endif()
我尝试设置这些目录,但没有成功。
- 展示你尝试了什么。并且不要用“RequiredHeader”替换实际的Boost头文件名。 - TsyvarevBOOST_INCLUDEDIR
变量,而不是BOOST_INCLUDE_DIR
。通过将Boost_DEBUG
变量设置为 1(或任何非 false 值),您可以获取有关搜索 Boost 的其他信息。 - Tsyvarevboost/config.hpp
文件的目录(也就是说,包含目录应该有一个名为boost
的子目录,而这个子目录中又应该包含名为config.hpp
的文件)。请检查BOOST_INCLUDEDIR
是否正好是那个目录。 - Tsyvarev