Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过CMake工具链包括STL标题的正确版本 我试图建立一个C++连接的CI流水线。我拥有的Docker容器不支持C++17,所以我想从LLVM页面下载一个版本,并正确设置它。然后我在/opt/clang7下提取这个。我还使用了一个CMake工具链文件,这样它就可以从这个铿锵发行版中获取include和lib等。这是我的工具链文件clang7 ci.cmake: SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER /opt/clang7/bin/clang) SET(CMAKE_CXX_COMPILER /opt/clang7/bin/clang++) SET(CMAKE_FIND_ROOT_PATH /opt/clang7) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)_C++_Cmake_Clang++ - Fatal编程技术网

通过CMake工具链包括STL标题的正确版本 我试图建立一个C++连接的CI流水线。我拥有的Docker容器不支持C++17,所以我想从LLVM页面下载一个版本,并正确设置它。然后我在/opt/clang7下提取这个。我还使用了一个CMake工具链文件,这样它就可以从这个铿锵发行版中获取include和lib等。这是我的工具链文件clang7 ci.cmake: SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER /opt/clang7/bin/clang) SET(CMAKE_CXX_COMPILER /opt/clang7/bin/clang++) SET(CMAKE_FIND_ROOT_PATH /opt/clang7) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

通过CMake工具链包括STL标题的正确版本 我试图建立一个C++连接的CI流水线。我拥有的Docker容器不支持C++17,所以我想从LLVM页面下载一个版本,并正确设置它。然后我在/opt/clang7下提取这个。我还使用了一个CMake工具链文件,这样它就可以从这个铿锵发行版中获取include和lib等。这是我的工具链文件clang7 ci.cmake: SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CMAKE_C_COMPILER /opt/clang7/bin/clang) SET(CMAKE_CXX_COMPILER /opt/clang7/bin/clang++) SET(CMAKE_FIND_ROOT_PATH /opt/clang7) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY),c++,cmake,clang++,C++,Cmake,Clang++,我将CMake配置称为CMake-DCMAKE_TOOLCHAIN\u FILE=../CMake/clang7-ci.CMake..,它似乎从工具链中拾取了正确的clang和clang++。正如我在CMake的配置输出中看到的那样: --C编译器标识为Clang 7.0.1 --CXX编译器标识为Clang 7.0.1 --检查C编译器是否工作:/opt/clang7/bin/clang --检查C编译器是否工作:/opt/clang7/bin/clang--works 所以,我假设它正确使用

我将CMake配置称为
CMake-DCMAKE_TOOLCHAIN\u FILE=../CMake/clang7-ci.CMake..
,它似乎从工具链中拾取了正确的clang和clang++。正如我在CMake的配置输出中看到的那样:

--C编译器标识为Clang 7.0.1

--CXX编译器标识为Clang 7.0.1

--检查C编译器是否工作:/opt/clang7/bin/clang

--检查C编译器是否工作:/opt/clang7/bin/clang--works

所以,我假设它正确使用工具链目录,否则它会如何找到我的C++编译器作为CLAN++。尽管如此,当我尝试使用

cmake--build构建时,它还是给了我以下错误:

文件包括在/builds/meguli/chops/tests/answer\u life/answer\u life.cpp:2: /builds/meguli/chops/tests/answer_life//catch.hpp:644:10:错误:命名空间“std”中没有名为“is_same_v”的模板;你是说“是一样的”吗

           (!std::is_same_v<T, Rest> && ...) && is_unique<Rest...>
              ~~~~~^
(!std::is_same_v&&&…&&&is_unique
~~~~~^
/usr/lib/gcc/x86_64-linux-gnu/6.3.0/../../../../../../../../../include/c++/6.3.0/type_traits:1517:12:注意:此处声明了“is_same” 结构是相同的 ^


如您所见,它正在查看主机目录中的
/usr/lib/../inclue/6.3.0
以获取include文件。这不是我想要的,我想要为C++17构建,我想要它包含来自clang发行版的头文件。我设置
set(CMAKE\u FIND\u ROOT\u PATH\u MODE\u INCLUDE ONLY)
以便它在工具链中搜索INCLUDE目录,但不起作用。如何才能只在<代码> /opt/CLA77<代码>?< p> > p>而不是突变<代码> CMACHYCXXFLAG/手动(您不应该)尝试设置CMAG:< /P>所使用的C++标准
set(CMAKE_CXX_STANDARD 17)
在定义目标之前,请将此放在首位


然后,clang将默认使用libstdc++。要使每个C++17功能都可用,只需升级GCC。

我必须将此docker映像与较旧的Ubuntu版本一起使用,并且无法将分布式GCC升级到大于6.3.0的版本,因为这是我的Ubuntu版本的最新包。有PPA可用,或者您也可以手动安装升级的libstdc++来更新这些内容,我要说的是,我不再手动使用
CMAKE\u CXX\u标志
,但问题依然存在。我无法添加ppa,因为在添加ppa后,
apt update
出现错误。出于某种原因,我的docker容器无法为GCC添加最新的PPA。我认为答案是您应该使用指向您的clang安装的工具链定义。我在一个项目中工作,该项目有一个CMake构建系统,该系统使用一组工具链文件来支持为“系统”编译器无法处理的几个不同的目标系统(Arm、Mips、x86等)构建。这似乎可以与
CMake\u FIND\u ROOT\u PATH
set一起工作。我会在下班后检查这个问题。我在关于工具链的评论后对这个问题进行了大量更新。您的更新确实清楚地显示了一个工具链文件,正如我在您的任务中所期望的那样。显然,我们仍然注意到错误消息指的是不正确的文件。作为进一步的诊断,您是否尝试使用等效于cc1plus-v的命令调用/opt/clang7编译器来显示默认的头搜索路径?我还没有尝试一个真正的答案,因为我需要参考一些工作中的信息。编译器在构建时是否配置为驻留在/opt/clang7?几年前,我构建了GCC4.8.1以驻留在opt中,当我今天使用-v运行它时,它会报告
--prefix=/opt/GCC-4.8.1