2016-12-23 42 views
3

我建立的應用程序與flto,我想parallelise它是在化妝如使用的所有核,如果我用make -j4運行它,然後在4芯在CMake的傳遞flto = jobserver與gcc

例子:

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?

+0

會選擇一個類似['ninja'構建系統](https://ninja-build.org/)的選項嗎?這真的加快了[我的項目構建](http://stackoverflow.com/questions/37327526/how-to-speed-up-compile-time-of-my-cmake-enabled-c-project)和漂亮關於CMake的一點是,您可以輕鬆切換到生成另一個構建環境(試一試)。 – Florian

+0

@弗洛裏安,我會研究它,但讓解決方案更可取 – RiaD

回答

0

不幸的是,這個問題唯一的解決方法似乎是修改cmake生成的生成文件。你將不得不在+添加前綴形式

$(CMAKE_COMMAND) -E cmake_link_script path/to/link.txt ... 

該文件path/to/link.txt在鏈接器命令包含-flto=jobserver選項的所有食譜線。