在Cmake中,将flto=jobserver传递给gcc
In Cmake pass flto=jobserver to gcc
我正在使用flto构建应用程序,我想在制作中使用的所有内核上并行化它,例如,如果我使用make -j4
运行它,然后在4个内核上运行它
例:
cmake_minimum_required(VERSION 2.8)
project(a)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto=jobserver")
add_executable(a a.cpp b.cpp)
其中a.cpp
和b.cpp
是任何合理的CPP(其中一个具有主要)
与make -j2
一起跑步让我:
-- Configuring done
-- Generating done
-- Build files have been written to: ...
[ 33%] Building CXX object CMakeFiles/a.dir/b.cpp.o
[ 66%] Building CXX object CMakeFiles/a.dir/a.cpp.o
[100%] Linking CXX executable a
make[3]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule.
[100%] Built target a
因此,仅使用一个内核。是否可以在此处将有关作业服务器的信息传递给 gcc?
不幸的是,解决此问题的唯一方法似乎是修改cmake
生成的生成文件。您必须将+
前缀添加到表单的所有食谱行中
$(CMAKE_COMMAND) -E cmake_link_script path/to/link.txt ...
其中文件path/to/link.txt
中的链接器命令包含-flto=jobserver
选项。
作为一种解决方法,您可以尝试强制 LTO 作业计数:
set(CMAKE_CXX_COMPILE_OPTIONS_IPO ${CMAKE_CXX_COMPILE_OPTIONS_IPO} -flto=8)
请评论此错误以提高其优先级:https://gitlab.kitware.com/cmake/cmake/-/issues/17781 同时,您必须使用固定的 -flto=x
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 数据成员SFINAE的C++17测试:gcc vs clang
- GCC对可能有效的代码抛出init list生存期警告
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用gcc从静态链接的文件中查找可选符号
- 普通环路未使用gcc 4.8.5自动矢量化
- 有了gcc,是否可以链接库,但前提是它存在
- 在clang++预处理器中确定gcc工具链版本
- 为什么 gcc 编译这个而 msvc 没有
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何使用Clang/GCC在Mac上为C/C++设置VSCode
- 在Cmake中,将flto=jobserver传递给gcc