2017-07-23 45 views
3

爲了能夠進行很多自動優化,我希望能夠首先使用標記-fprofile-generate來編譯我的程序,然後運行它來生成配置文件,然後重新編譯程序改爲-fprofile-useCMake:連續編譯一個程序兩次

這意味着我想連續兩次編譯我的程序,每次都有兩個不同的CMAKE_CXX_FLAGS

我該怎麼做,使用CMake?

回答

1

你可以構建一些東西然後運行它,然後在執行之後通過使用客戶目標和「add_dependencies」命令來構建其他東西。爲了您的gcov情況下,你可以這樣做:

profile.cxx

#include <iostream> 
int main(void) { 
    std::cout << "Hello from Generating Profile run" << std::endl; 
    return 0; 
} 

的CMakeLists.txt

cmake_minimum_required(VERSION 3.1 FATAL_ERROR) 

project(profileExample C CXX) 

# compile initial program 
add_executable(profileGenerate profile.cxx) 
set_target_properties(profileGenerate PROPERTIES COMPILE_FLAGS "-fprofile- 
generate") 
target_link_libraries(profileGenerate gcov) 

add_executable(profileUse profile.cxx) 
set_target_properties(profileUse PROPERTIES COMPILE_FLAGS "-fprofile-use") 
target_link_libraries(profileUse gcov) 

# custom target to run program 
add_custom_target(profileGenerate_run 
    COMMAND profileGenerate 
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
    COMMENT "run Profile Generate" 
    SOURCES profile.cxx 
    ) 

#create depency for profileUse on profileGenerate_run 
add_dependencies(profileUse profileGenerate_run) 

輸出,顯示建造 - >運行 - >構建

Build Output

+1

感謝您的回答。我沒有想到這麼做:O – CpCd0y