我是CMake项目的新手,我想在项目中使用文件系统库。我正在使用GCC 8.2和CMake 3.13运行Ubuntu 18.04。为了实现这一点,我尝试了两种选择:
选项1
cmake_minimum_required(VERSION 3.13)
project(TheFsProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-std=c++17 -lstdc++fs")
Run Code Online (Sandbox Code Playgroud)
这无济于事,因为编译器在编译期间仍找不到文件系统库。
选项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()
Run Code Online (Sandbox Code Playgroud)
这也无济于事,因为我收到了我不理解的CMake错误。
(CHECK_CXX_SYMBOL_EXISTS):
CHECK_CXX_SYMBOL_EXISTS Macro invoked with incorrect arguments for macro named: CHECK_CXX_SYMBOL_EXISTS
Run Code Online (Sandbox Code Playgroud)
我对这个话题不感兴趣,这就是为什么我来这里。我不介意花更多的精力去寻找更多的东西,但是我不知道该去哪里。任何帮助,将不胜感激!
感谢到目前为止的答复!我根据您的反馈做出了选择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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能解决我的问题。它仍然在编译期间发出一个错误,即找不到编译头。
谢谢您到目前为止的所有回复。所有这些帮助。我上次尝试了Ashkan的回答(因为它似乎令人生畏)。这回
编译器缺少文件系统功能。
所以我猜想那是错误的。从我现在知道可能不是由于我的CMake文件的意义上来说,这很有用。我现在必须找出为什么编译器确实支持文件系统标头...
严格来说,回答此问题是因为我的问题与CMake文件有关。我将把Ashkan的答案标记为解决方案,只是因为它产生了我的故障排除搜索的下一步。如果可以的话,我也将他的答案标记为lubgr,因为我认为这也是一个很好的答案。感谢大家!
所以我有以下代码:
#include <iostream>
#include <string>
#include <array>
using namespace std;
int main()
{
array<long, 3> test_vars = { 121, 319225, 15241383936 };
for (long test_var : test_vars) {
cout << test_var << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,我得到以下输出:
在网站cpp.sh上执行的相同代码给出了以下输出:
我希望输出类似于cpp.sh中的输出.我不明白Visual Studio的输出.这可能很简单; 但是,如果有人能告诉我什么是错的,我会很感激的.它已经成为我烦恼的真正根源.