使用" experimental / filesystem"构建项目;使用cmake

时间:2017-06-10 18:38:42

标签: c++ cmake c++14

我需要添加一个"实验/文件系统"标题到我的项目

#include <experimental/filesystem>
int main() {
    auto path = std::experimental::filesystem::current_path();
    return 0;
}

所以我使用-lstdc ++ fs标志并与libstdc ++ fs.a链接

cmake_minimum_required(VERSION 3.7)
project(testcpp)
set(CMAKE_CXX_FLAGS "-std=c++14 -lstdc++fs" )
set(SOURCE_FILES main.cpp)
target_link_libraries(${PROJECT_NAME} /usr/lib/gcc/x86_64-linux-gnu/7/libstdc++fs.a)
add_executable(testcpp ${SOURCE_FILES})

但是,我有下一个错误:

  

CMakeLists.txt上的CMake错误:9(target_link_libraries):不能   为target&#34; testcpp&#34;指定链接库这不是由建造的   这个项目。

但如果我直接编译,那就没问题了:

g++-7 -std=c++14 -lstdc++fs  -c main.cpp -o main.o
g++-7 -o main main.o /usr/lib/gcc/x86_64-linux-gnu/7/libstdc++fs.a

我的错误在哪里?

1 个答案:

答案 0 :(得分:14)

add_executable()电话必须在testcpp电话之后召开。否则,cmake_minimum_required(VERSION 3.7) project(testcpp) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # NOTE: The following would add library with absolute path # Which is bad for your projects cross-platform capabilities # Just let the linker search for it #add_library(stdc++fs UNKNOWN IMPORTED) #set_property(TARGET stdc++fs PROPERTY IMPORTED_LOCATION "/usr/lib/gcc/x86_64-linux-gnu/7/libstdc++fs.a") set(SOURCE_FILES main.cpp) add_executable(testcpp ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME} stdc++fs) 目标尚未知晓。 CMake按顺序解析所有内容。

所以只是为了完整性,这是我测试的例子的工作版本:

Object.keys(ray).forEach(k => ray[k].forEach(e => doSomethingWith(k,e)))