【问题标题】:Cannot use the C++ `std::filesystem` library with Meson build无法在 Meson 构建中使用 C++ `std::filesystem` 库
【发布时间】:2018-09-26 10:58:32
【问题描述】:

我正在尝试使用 Meson 构建系统构建一段使用新 C++17 文件系统库的 C++ 代码。

这是涉及到的meson.build 文件:

if not compiler.has_header('filesystem')   # This is OK
    warning('The compiler has no <filesystem> header file')
endif

filesystem_dep = dependency('libc++fs', modules : ['filesystem'])

test_exe = executable('test', test_src,
                      include_directories : include_dirs,
                      dependencies : filesystem_dep
                     )

如果使用 boost::filesystem 库,这应该是正确的语法:

filesystem_dep = dependency('boost', modules : ['filesystem'])

如何指定我想要标准 C++ 库中包含的版本?这是我尝试但没有成功的方法:'libc++fs'、'stdlib'、'stdc++'、'libc++'、'c++'、'c++17'。

这是我从 Meson 得到的错误信息:

src/meson.build:33:0:错误:未找到本机依赖项“libc++fs”

我目前使用的编译器是 LLVM/clang。

【问题讨论】:

  • (不使用clang或介子,所以我可能错了,但是)如果你使用std::filesystem,你是否检查过是否需要将libc++fs与clang链接?
  • @roalz - 我认为 Meson 应该处理它,并根据编译器(clang 或 gcc)选择 libc++fslibstdc++fs

标签: c++ clang boost-filesystem meson-build


【解决方案1】:

dependency() 用于外部库。标准库应该使用编译器命令行配置特殊功能,如add_XXX_arguments()。所以,试试

add_project_arguments(['-stdlib=libc++'], language : 'cpp')
add_project_link_arguments(['-stdlib=libc++','-lstdc++fs'], language : 'cpp')

但是,case 中可能不需要“-lstdc++fs”。

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2020-11-04
    • 2018-05-10
    相关资源
    最近更新 更多