首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cmake构建带有“实验性/文件系统”的项目

使用cmake构建带有“实验性/文件系统”的项目
EN

Stack Overflow用户
提问于 2017-06-10 18:38:42
回答 1查看 19.2K关注 0票数 23

我需要在我的项目中添加一个“试验性/文件系统”头

代码语言:javascript
复制
#include <experimental/filesystem>
int main() {
    auto path = std::experimental::filesystem::current_path();
    return 0;
}

因此,我使用了-lstdc++fs标志并与libstdc++fs.a链接。

代码语言:javascript
复制
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})

但是,我有下一个错误:

CMake CMakeLists.txt:9错误(target_link_libraries):无法为目标"testcpp“指定链接库,该链接库不是由 这个项目。

但是如果我直接编译的话,没关系:

代码语言:javascript
复制
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

我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-10 19:27:55

只是target_link_libraries()调用必须在add_executable()调用之后进行。否则,还不知道testcpp目标。CMake按顺序解析所有的东西。

因此,为了完整起见,下面是我测试过的示例的工作版本:

代码语言:javascript
复制
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)
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44476810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档