我刚接触CMake项目,并想在我的项目中使用文件系统库。我使用的是Ubuntu 18.04, GCC 8.2 和 CMake 3.13。为了实现这个目标,我尝试了两个选项:
选项1
cmake_minimum_required(VERSION 3.13)
project(TheFsProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-std=c++17 -lstdc++fs")
这并没有帮助,因为编译器在编译时仍然无法找到文件系统库。
选项2(摘自:https://www.scivision.co/cmake-cpp-17-filesystem/)
make_minimum_required(VERSION 3.13)
project(TheFsProject)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_REQUIRED_FLAGS -std=c++17)
include(CheckCXXSymbolExists)
CHECK_CXX_SYMBOL_EXISTS(std::filesystem::path::preferred_separator cxx17fs)
if(cxx17fs)
add_executable(TheFsProject main.cpp)
set_property(TARGET TheFsProject PROPERTY CXX_STANDARD 17)
endif()
这也没有帮助,因为我遇到了一个我不理解的CMake错误。
(CHECK_CXX_SYMBOL_EXISTS):
CHECK_CXX_SYMBOL_EXISTS Macro invoked with incorrect arguments for macro named: CHECK_CXX_SYMBOL_EXISTS
我对这个主题感到很陌生,所以才来这里寻求帮助。我愿意花更多的时间去了解,但我不知道该在哪里寻找。非常感谢任何帮助!
编辑1
感谢迄今为止的回复!基于您的反馈,我做出了选项3:
cmake_minimum_required(VERSION 3.13)
project(TheFsProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(TheFsProject main.cpp)
target_link_libraries(TheFsProject stdc++fs)
很遗憾,它没有解决我的问题。在编译期间仍会发出错误,表示找不到编译头文件。
第二次编辑
感谢到目前为止的所有回复。所有这些都有所帮助。我最后尝试了Ashkan的答案(因为它看起来比较困难)。这个返回
编译器缺少文件系统功能。
所以我猜测那方面出了问题。从这个意义上讲,这是有用的,因为我现在知道这可能不是由于我的CMake文件。现在我必须找出为什么编译器支持文件系统头文件...
第三次编辑
严格来说,这个问题已经得到了解答,因为我的问题涉及CMake文件。我将标记Ashkan的答案为解决方案,仅仅因为它提供了我下一步的故障排除搜索。如果可以的话,我也会标记lubgr的答案,因为我认为那是一个非常好的答案。谢谢大家!
Boost_INCLUDE_DIR
,而其他版本使用标志Boost_INCLUDEDIR
(没有下划线)。您可以通过阅读path-to-cmake/Modules/FindBoost.cmake
下的FindBoost.cmake
文件来检查适合您情况的正确标志。 - marcelosalloum