add_compile_options加入某些編譯選項(-pg)無效


add_compile_options加入某些編譯選項(-pg)無效

是這樣,今天我要使用gprof工具分析一段C++代碼的運行時間,工程是CMake創建的

我們都知道,要使用gprof就要在代碼編譯時加入-pg選項,CMake添加編譯選項通常有以下兩種方法:

  • add_compile_options(-pg)

    add_compile_options(-pg)
    message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
    

    輸出結果:

    CMAKE_CXX_FLAGS =
    

    不僅CMAKE_CXX_FLAGS沒有改變,而且-pg選項也沒有生效(即運行可執行文件后並沒有生成.out文件)

  • set(CMAKE_CXX_FLAGS -pg)

    set(CMAKE_CXX_FLAGS -pg)
    message(STATUS "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
    

    輸出結果:

    CMAKE_CXX_FLAGS = -pg
    

    CMAKE_CXX_FLAGS成功加入-pg,而且-pg也生效(能夠生成.out文件),使用gprof正常分析。

這里我就產生了幾個疑問:

  1. 為什么add_compile_options(-pg)不起作用?
  2. CMAKE_CXX_FLAGS到底有什么含義?是否包含了所有的編譯選項?




  • add_compile_options是用來配置當前目錄和子目錄的所有目標文件的options。如果有一個庫需要讓所有的目標文件鏈接的時候,使用此命令非常方便。所有添加的options可以通過COMPILE_OPTIONS屬性查看。add_compile_options作用的范圍太廣,一般很少使用。
  • CMAKE_CXX_FLAGS是配置所有C++目標文件的flags。可以傳遞一些參數比如warnings的等級,使用的C++標准等。對C語言的目標文件沒有效,因此用戶可為他們兩種文件設置不同的flags。

對於某些編譯選項如-fPIC,兩種方法都能使其生效,但是調用add_compile_options方法時CMAKE_CXX_FLAGS不會被改變;但對於某些選項如-pg,可以通過修改CMAKE_CXX_FLAGS生效,但調用add_compile_options無效!

對於一個目標文件,CMake會收集CMAKE_CXX_FLAGSCOMPILE_OPTIONS屬性等來作為最終的flags。

所以,CMAKE_CXX_FLAGS有其獨立的含義而不能被其它的命令改變!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM