亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在CMake文件中添加鏈接器或編譯標志?

如何在CMake文件中添加鏈接器或編譯標志?

如何在CMake文件中添加鏈接器或編譯標志?我正在使用arm-linux-androideabi-g++編譯器。當我嘗試編譯一個簡單的“你好,世界!” 程序編譯好。當我通過在該代碼中添加一個簡單的異常處理來測試它時它也可以工作(添加之后-fexceptions..我猜它默認是禁用的)。這適用于Android設備,我只想使用CMake,而不是ndk-build。例如 - first.cpp#include <iostream>using namespace std;int main(){    try{    }    catch(...)    {    }    return 0;}./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions它沒有問題......問題 ...我試圖用CMake文件編譯文件。我想添加-fexceptions標志。我試過了set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )和set ( CMAKE_C_FLAGS "fexceptions")它仍然顯示錯誤。
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

假設您要添加這些標志(最好將它們聲明為常量):

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")SET(GCC_COVERAGE_LINK_FLAGS    "-lgcov")

有幾種方法可以添加它們:

  1. 最簡單的(不干凈,但簡單方便,只適用于編譯標志,C&C ++一次):

    add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
  2. 附加到相應的CMake變量:

    SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
  3. 使用目標屬性,參見 doc CMake編譯標志目標屬性,需要知道目標名稱。

    get_target_property(TEMP ${THE_TARGET} COMPILE_FLAGS)if(TEMP STREQUAL "TEMP-NOTFOUND")
      SET(TEMP "") # Set to empty stringelse()
      SET(TEMP "${TEMP} ") # A space to cleanly separate from existing contentendif()# Append our valuesSET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" )set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )

現在我使用方法2。


查看完整回答
反對 回復 2019-08-15
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

在較新版本的CMake中,您可以分別使用target_compile_options和設置單個目標的編譯器和鏈接器標志target_link_libraries(是的,后者也設置鏈接器選項):

target_compile_options(first-test PRIVATE -fexceptions)

這種方法的優點是你可以控制選項傳播到依賴于這個PUBLIC和/的其他目標PRIVATE。

從CMake 3.13開始,您還可以使用target_link_options添加鏈接器選項,使意圖更清晰。


查看完整回答
反對 回復 2019-08-15
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

嘗試設置變量CMAKE_CXX_FLAGS而不是CMAKE_C_FLAGS

set (CMAKE_CXX_FLAGS "-fexceptions")

該變量CMAKE_C_FLAGS僅影響C編譯器,但您正在編譯C ++代碼。

添加標志CMAKE_EXE_LINKER_FLAGS是多余的。


查看完整回答
反對 回復 2019-08-15
  • 3 回答
  • 0 關注
  • 3270 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號