欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Cmake中強大的輸出函數(shù)message示例解析

 更新時間:2023年05月31日 14:55:23   作者:泡沫o0  
這篇文章主要介紹了Cmake中強大的輸出函數(shù)message解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

message函數(shù)說明

在CMake中,message()函數(shù)用于向終端輸出信息。

message([<mode>] "message text" ...)函數(shù)的<mode>參數(shù)可以是以下之一:

  • (none): 等同于STATUS,但不推薦使用。
  • STATUS: 輸出的信息會被發(fā)送到CMake的狀態(tài)消息流,這是message()函數(shù)的默認模式。在命令行上,這些消息通常會被顯示出來,但在圖形界面中,它們可能會被重定向到其他地方。
  • WARNING: 輸出的信息會被發(fā)送到CMake的警告消息流。這些消息會被顯示出來,并且會標記為警告。
  • AUTHOR_WARNING: 這是WARNING模式的一種變體,只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量為FALSE時才會產(chǎn)生警告。
  • SEND_ERROR: 輸出的信息會被發(fā)送到CMake的錯誤消息流,但不會立即停止CMake的處理過程。
  • FATAL_ERROR: 輸出的信息會被發(fā)送到CMake的錯誤消息流,并立即停止CMake的處理過程。
參數(shù)使用場景底層原理優(yōu)點缺點
(none)當你想輸出一條普通的狀態(tài)消息,但不希望給它指定任何特殊的模式時。輸出的信息會被發(fā)送到CMake的狀態(tài)消息流。簡單易用,不需要指定模式。不推薦使用,因為它的行為可能會在未來的CMake版本中改變。
STATUS當你想輸出一條狀態(tài)消息,例如進度信息或配置信息時。輸出的信息會被發(fā)送到CMake的狀態(tài)消息流。明確表示這是一條狀態(tài)消息,易于理解。在圖形界面中,這些消息可能會被重定向到其他地方,不一定能被用戶看到。
WARNING當你想輸出一條警告消息,例如某個選項已被棄用或某個操作可能會失敗時。輸出的信息會被發(fā)送到CMake的警告消息流。明確表示這是一條警告消息,可以引起用戶的注意。過多的警告消息可能會讓用戶感到困擾,忽視真正重要的警告。
AUTHOR_WARNING當你是項目的開發(fā)者,并且你想輸出一條只有在開發(fā)模式下才會顯示的警告消息時。輸出的信息會被發(fā)送到CMake的警告消息流,但只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量為FALSE時才會產(chǎn)生警告。可以避免在用戶模式下顯示不必要的警告。如果CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量被設(shè)置為TRUE,這些警告會被忽略。
SEND_ERROR當你遇到一個錯誤,但你希望CMake繼續(xù)處理剩下的命令時。輸出的信息會被發(fā)送到CMake的錯誤消息流,但不會立即停止CMake的處理過程。可以在發(fā)生錯誤時繼續(xù)執(zhí)行CMake的處理過程。由于CMake的處理過程沒有立即停止,可能會導致更多的錯誤。
FATAL_ERROR當你遇到一個嚴重的錯誤,你希望立即停止CMake的處理過程時。輸出的信息會被發(fā)送到CMake的錯誤消息流,并立即停止CMake的處理過程。可以在發(fā)生嚴重錯誤時立即停止CMake的處理過程,防止錯誤的擴散。一旦使用,CMake的處理過程會立即停止,無法執(zhí)行任何后續(xù)的命令。

STATUS

在CMake中,message(STATUS "Your message")常常被用來輸出構(gòu)建過程中的狀態(tài)信息。以下是一些具體的使用示例:

1.輸出變量的值:

set(MY_VARIABLE "Hello, CMake!") message(STATUS "MY_VARIABLE is: ${MY_VARIABLE}")

在這個例子中,message(STATUS "MY_VARIABLE is: ${MY_VARIABLE}")會輸出一條狀態(tài)消息,內(nèi)容為"MY_VARIABLE is: Hello, CMake!"。${MY_VARIABLE}是CMake的變量引用語法,它會被替換為MY_VARIABLE變量的值。

2.輸出配置信息:

option(USE_MY_LIBRARY "Use my library" ON) message(STATUS "USE_MY_LIBRARY is set to: ${USE_MY_LIBRARY}")

在這個例子中,option(USE_MY_LIBRARY "Use my library" ON)定義了一個名為USE_MY_LIBRARY的選項,初始值為ONmessage(STATUS "USE_MY_LIBRARY is set to: ${USE_MY_LIBRARY}")會輸出一條狀態(tài)消息,內(nèi)容為"USE_MY_LIBRARY is set to: ON"或"USE_MY_LIBRARY is set to: OFF",取決于USE_MY_LIBRARY選項的值。

3.輸出構(gòu)建目標信息:

add_library(MyLibrary SHARED src/my_library.cpp) message(STATUS "Added shared library target: MyLibrary")

在這個例子中,add_library(MyLibrary SHARED src/my_library.cpp)添加了一個名為MyLibrary的共享庫目標。message(STATUS "Added shared library target: MyLibrary")會輸出一條狀態(tài)消息,內(nèi)容為"Added shared library target: MyLibrary"。

這些狀態(tài)消息在命令行上運行CMake時會被顯示出來,幫助你了解CMake的處理過程。在圖形界面的CMake工具(如CMake GUI或IDE的CMake集成)中,這些消息可能會被顯示在專門的輸出窗口或日志文件中。

WARNING

在CMake中,message(WARNING "message text")函數(shù)用于輸出警告消息。這些消息會被發(fā)送到CMake的警告消息流,并在終端中顯示出來。同時,這些消息會被標記為警告,這意味著它們可能會引起用戶的注意,或者在某些情況下,可能會導致構(gòu)建過程失敗。

例如,假設(shè)你正在編寫一個需要某個庫才能正常工作的項目,你可以使用find_package()函數(shù)來查找這個庫。如果find_package()函數(shù)沒有找到這個庫,你可以使用message(WARNING)函數(shù)來輸出一個警告消息,告訴用戶這個庫沒有找到:

find_package(SomeLibrary)
if(NOT SomeLibrary_FOUND)
    message(WARNING "SomeLibrary not found, some features will not be available.")
endif()

在這個例子中,如果CMake在配置過程中沒有找到SomeLibrary,它會輸出一個警告消息,內(nèi)容為"SomeLibrary not found, some features will not be available."。這個警告消息會被發(fā)送到CMake的警告消息流,并在終端中顯示出來,從而讓用戶知道他們可能需要安裝SomeLibrary才能使用所有的功能。

請注意,message(WARNING)函數(shù)只是輸出警告消息,它不會改變CMake的處理過程。如果你想在發(fā)生錯誤時停止CMake的處理過程,你應該使用message(FATAL_ERROR)函數(shù)。

AUTHOR_WARNING

AUTHOR_WARNING模式在CMake中用于輸出開發(fā)者警告。這種模式的警告只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量為FALSE時才會顯示。這個變量默認為FALSE,但如果你在CMakeLists.txt文件中設(shè)置了這個變量為TRUE,那么AUTHOR_WARNING模式的警告就不會顯示。

這種機制可以用于區(qū)分開發(fā)者警告和用戶警告。例如,如果你是一個庫的開發(fā)者,你可能希望在開發(fā)過程中看到所有的警告,包括開發(fā)者警告,但是你的用戶可能只關(guān)心他們需要知道的警告,不希望看到開發(fā)者警告。這時,你就可以在你的CMakeLists.txt文件中使用AUTHOR_WARNING模式來輸出開發(fā)者警告,然后告訴你的用戶設(shè)置CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量為TRUE來隱藏這些警告。

以下是一個AUTHOR_WARNING模式的示例:

# 如果某個變量沒有被設(shè)置,輸出一個開發(fā)者警告
if(NOT DEFINED MY_VARIABLE)
  message(AUTHOR_WARNING "MY_VARIABLE is not defined")
endif()

在這個示例中,如果MY_VARIABLE變量沒有被設(shè)置,CMake會輸出一個開發(fā)者警告,內(nèi)容為"MY_VARIABLE is not defined"。如果CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量被設(shè)置為TRUE,這個警告就不會顯示。

SEND_ERROR

SEND_ERROR模式在message()函數(shù)中用于輸出錯誤信息,但不會立即停止CMake的處理過程。這意味著CMake會繼續(xù)處理剩余的命令,直到遇到一個FATAL_ERROR或者處理完所有命令。然后,CMake會以非零狀態(tài)退出,表示出現(xiàn)了錯誤。

以下是一個SEND_ERROR的示例:

if(NOT DEFINED REQUIRED_VARIABLE)
    message(SEND_ERROR "REQUIRED_VARIABLE is not defined")
endif()

在這個示例中,我們首先檢查變量REQUIRED_VARIABLE是否已經(jīng)定義。如果沒有定義,我們就使用message(SEND_ERROR ...)輸出一條錯誤信息。這條錯誤信息會被發(fā)送到CMake的錯誤消息流,并且CMake的處理過程不會立即停止。相反,CMake會繼續(xù)處理剩余的命令,直到遇到一個FATAL_ERROR或者處理完所有命令。然后,CMake會以非零狀態(tài)退出,表示出現(xiàn)了錯誤。

請注意,雖然SEND_ERROR不會立即停止CMake的處理過程,但它會阻止生成步驟的執(zhí)行。也就是說,如果CMake在處理過程中遇到了一個SEND_ERROR,那么即使CMake成功處理了所有命令,生成步驟也不會執(zhí)行。這是因為SEND_ERROR表示了一個嚴重的問題,需要用戶的注意和修復。

FATAL_ERROR

FATAL_ERROR是CMake中message()函數(shù)的一種模式,用于輸出錯誤消息并立即停止CMake的處理過程。當CMake遇到一個無法繼續(xù)的錯誤時,你可以使用message(FATAL_ERROR "error message")來輸出錯誤消息并停止處理。

例如,假設(shè)你正在編寫一個需要C++11或更高版本的項目,你可以使用以下代碼來檢查C++編譯器是否支持C++11:

if(NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11)
    message(FATAL_ERROR "This project requires C++11 or higher!")
endif()

在這個例子中,如果CMake檢測到C++編譯器的標準版本小于11,它會輸出錯誤消息"This project requires C++11 or higher!",并立即停止處理。這意味著CMake不會生成構(gòu)建系統(tǒng),也不會執(zhí)行任何后續(xù)的CMake命令。這可以防止在不滿足項目要求的情況下嘗試構(gòu)建項目,從而避免可能的構(gòu)建錯誤和問題。

請注意,FATAL_ERROR應該謹慎使用,只有在確實需要立即停止CMake處理過程的情況下才應使用。在大多數(shù)情況下,使用WARNINGSEND_ERROR模式可能更合適。

到此這篇關(guān)于Cmake中強大的輸出函數(shù)message解析的文章就介紹到這了,更多相關(guān)Cmake輸出函數(shù)message內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    C++用Dijkstra(迪杰斯特拉)算法求最短路徑

    Dijkstra(迪杰斯特拉)算法是典型的最短路徑路由算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。下面這篇文章就給大家介紹關(guān)于C++用Dijkstra算法(迪杰斯特拉算法)求最短路徑的方法,下面來一起看看吧。
    2016-12-12
  • C語言實現(xiàn)紙牌24點小游戲

    C語言實現(xiàn)紙牌24點小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)紙牌24點小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言單鏈表的圖文示例講解

    C語言單鏈表的圖文示例講解

    單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個最簡單的結(jié)點結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點結(jié)構(gòu)。在結(jié)點中數(shù)據(jù)域用來存儲數(shù)據(jù)元素,指針域用于指向下一個具有相同結(jié)構(gòu)的結(jié)點。?因為只有一個指針結(jié)點,稱為單鏈表
    2023-02-02
  • C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    但是在實際的編程中,往往會發(fā)生這種情況,即所需的內(nèi)存空間取決于實際輸入的數(shù)據(jù),而無法預先確定 。為了解決上述問題,C語言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要動態(tài)的分配內(nèi)存空間,也可把不再使用的空間回收再次利用
    2022-12-12
  • vscode遠程連接服務器(免密登錄+遠程開發(fā))

    vscode遠程連接服務器(免密登錄+遠程開發(fā))

    vscode的遠程連接功能十分方便,本文就來介紹一下vscode遠程連接服務器,主要包括免密登錄和遠程開發(fā),感興趣的可以了解一下
    2024-07-07
  • C++中l(wèi)ist的使用方法及常用list操作總結(jié)

    C++中l(wèi)ist的使用方法及常用list操作總結(jié)

    這篇文章主要介紹了C++中l(wèi)ist的使用方法及常用list操作總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • c++重載運算符時返回值為類的對象或者返回對象的引用問題

    c++重載運算符時返回值為類的對象或者返回對象的引用問題

    這篇文章主要介紹了c++重載運算符時返回值為類的對象或者返回對象的引用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • tinyxml 常用的C++ XML解析器非常優(yōu)秀

    tinyxml 常用的C++ XML解析器非常優(yōu)秀

    讀取和設(shè)置xml配置文件是最常用的操作,試用了幾個C++的XML解析器,個人感覺TinyXML是使用起來最舒服的,因為它的API接口和Java的十分類似,面向?qū)ο笮院芎?/div> 2012-11-11
  • C語言中g(shù)etchar()與putchar()函數(shù)詳解

    C語言中g(shù)etchar()與putchar()函數(shù)詳解

    本文主要介紹了C語言中g(shù)etchar()與putchar()函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • C語言模擬內(nèi)存函數(shù)分析之mencpy與memmove

    C語言模擬內(nèi)存函數(shù)分析之mencpy與memmove

    這篇文章主要介紹了C語言詳解如何模擬內(nèi)存函數(shù),用到了mencpy與memmove兩個函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03

最新評論