簡體   English   中英

在 Cmake 中將 flto=jobserver 傳遞給 gcc

[英]In Cmake pass flto=jobserver to gcc

我正在使用 flto 構建應用程序,我想在 make 中使用的所有內核上並行化它,例如,如果我使用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.cppb.cpp是任何合理的 cpps(其中一個有主)

使用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

因此,僅使用一個核心。 是否可以在此處將有關 jobserver 的信息傳遞給 gcc?

不幸的是,解決這個問題的唯一方法似乎是修改cmake生成的 makefile。 您必須在表單的所有配方行中添加+前綴

$(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM