Cmake中強(qiáng)大的輸出函數(shù)message示例解析
message函數(shù)說(shuō)明
在CMake中,message()
函數(shù)用于向終端輸出信息。
message([<mode>] "message text" ...)
函數(shù)的<mode>
參數(shù)可以是以下之一:
- (none): 等同于STATUS,但不推薦使用。
- STATUS: 輸出的信息會(huì)被發(fā)送到CMake的狀態(tài)消息流,這是message()函數(shù)的默認(rèn)模式。在命令行上,這些消息通常會(huì)被顯示出來(lái),但在圖形界面中,它們可能會(huì)被重定向到其他地方。
- WARNING: 輸出的信息會(huì)被發(fā)送到CMake的警告消息流。這些消息會(huì)被顯示出來(lái),并且會(huì)標(biāo)記為警告。
- AUTHOR_WARNING: 這是WARNING模式的一種變體,只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS變量為FALSE時(shí)才會(huì)產(chǎn)生警告。
- SEND_ERROR: 輸出的信息會(huì)被發(fā)送到CMake的錯(cuò)誤消息流,但不會(huì)立即停止CMake的處理過(guò)程。
- FATAL_ERROR: 輸出的信息會(huì)被發(fā)送到CMake的錯(cuò)誤消息流,并立即停止CMake的處理過(guò)程。
參數(shù) | 使用場(chǎng)景 | 底層原理 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|---|
(none) | 當(dāng)你想輸出一條普通的狀態(tài)消息,但不希望給它指定任何特殊的模式時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的狀態(tài)消息流。 | 簡(jiǎn)單易用,不需要指定模式。 | 不推薦使用,因?yàn)樗男袨榭赡軙?huì)在未來(lái)的CMake版本中改變。 |
STATUS | 當(dāng)你想輸出一條狀態(tài)消息,例如進(jìn)度信息或配置信息時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的狀態(tài)消息流。 | 明確表示這是一條狀態(tài)消息,易于理解。 | 在圖形界面中,這些消息可能會(huì)被重定向到其他地方,不一定能被用戶看到。 |
WARNING | 當(dāng)你想輸出一條警告消息,例如某個(gè)選項(xiàng)已被棄用或某個(gè)操作可能會(huì)失敗時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的警告消息流。 | 明確表示這是一條警告消息,可以引起用戶的注意。 | 過(guò)多的警告消息可能會(huì)讓用戶感到困擾,忽視真正重要的警告。 |
AUTHOR_WARNING | 當(dāng)你是項(xiàng)目的開發(fā)者,并且你想輸出一條只有在開發(fā)模式下才會(huì)顯示的警告消息時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的警告消息流,但只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS 變量為FALSE 時(shí)才會(huì)產(chǎn)生警告。 | 可以避免在用戶模式下顯示不必要的警告。 | 如果CMAKE_SUPPRESS_DEVELOPER_WARNINGS 變量被設(shè)置為TRUE ,這些警告會(huì)被忽略。 |
SEND_ERROR | 當(dāng)你遇到一個(gè)錯(cuò)誤,但你希望CMake繼續(xù)處理剩下的命令時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的錯(cuò)誤消息流,但不會(huì)立即停止CMake的處理過(guò)程。 | 可以在發(fā)生錯(cuò)誤時(shí)繼續(xù)執(zhí)行CMake的處理過(guò)程。 | 由于CMake的處理過(guò)程沒(méi)有立即停止,可能會(huì)導(dǎo)致更多的錯(cuò)誤。 |
FATAL_ERROR | 當(dāng)你遇到一個(gè)嚴(yán)重的錯(cuò)誤,你希望立即停止CMake的處理過(guò)程時(shí)。 | 輸出的信息會(huì)被發(fā)送到CMake的錯(cuò)誤消息流,并立即停止CMake的處理過(guò)程。 | 可以在發(fā)生嚴(yán)重錯(cuò)誤時(shí)立即停止CMake的處理過(guò)程,防止錯(cuò)誤的擴(kuò)散。 | 一旦使用,CMake的處理過(guò)程會(huì)立即停止,無(wú)法執(zhí)行任何后續(xù)的命令。 |
STATUS
在CMake中,message(STATUS "Your message")
常常被用來(lái)輸出構(gòu)建過(guò)程中的狀態(tài)信息。以下是一些具體的使用示例:
1.輸出變量的值:
set(MY_VARIABLE "Hello, CMake!") message(STATUS "MY_VARIABLE is: ${MY_VARIABLE}")
在這個(gè)例子中,message(STATUS "MY_VARIABLE is: ${MY_VARIABLE}")
會(huì)輸出一條狀態(tài)消息,內(nèi)容為"MY_VARIABLE is: Hello, CMake!"。${MY_VARIABLE}
是CMake的變量引用語(yǔ)法,它會(huì)被替換為MY_VARIABLE
變量的值。
2.輸出配置信息:
option(USE_MY_LIBRARY "Use my library" ON) message(STATUS "USE_MY_LIBRARY is set to: ${USE_MY_LIBRARY}")
在這個(gè)例子中,option(USE_MY_LIBRARY "Use my library" ON)
定義了一個(gè)名為USE_MY_LIBRARY
的選項(xiàng),初始值為ON
。message(STATUS "USE_MY_LIBRARY is set to: ${USE_MY_LIBRARY}")
會(huì)輸出一條狀態(tài)消息,內(nèi)容為"USE_MY_LIBRARY is set to: ON"或"USE_MY_LIBRARY is set to: OFF",取決于USE_MY_LIBRARY
選項(xiàng)的值。
3.輸出構(gòu)建目標(biāo)信息:
add_library(MyLibrary SHARED src/my_library.cpp) message(STATUS "Added shared library target: MyLibrary")
在這個(gè)例子中,add_library(MyLibrary SHARED src/my_library.cpp)
添加了一個(gè)名為MyLibrary
的共享庫(kù)目標(biāo)。message(STATUS "Added shared library target: MyLibrary")
會(huì)輸出一條狀態(tài)消息,內(nèi)容為"Added shared library target: MyLibrary"。
這些狀態(tài)消息在命令行上運(yùn)行CMake時(shí)會(huì)被顯示出來(lái),幫助你了解CMake的處理過(guò)程。在圖形界面的CMake工具(如CMake GUI或IDE的CMake集成)中,這些消息可能會(huì)被顯示在專門的輸出窗口或日志文件中。
WARNING
在CMake中,message(WARNING "message text")
函數(shù)用于輸出警告消息。這些消息會(huì)被發(fā)送到CMake的警告消息流,并在終端中顯示出來(lái)。同時(shí),這些消息會(huì)被標(biāo)記為警告,這意味著它們可能會(huì)引起用戶的注意,或者在某些情況下,可能會(huì)導(dǎo)致構(gòu)建過(guò)程失敗。
例如,假設(shè)你正在編寫一個(gè)需要某個(gè)庫(kù)才能正常工作的項(xiàng)目,你可以使用find_package()
函數(shù)來(lái)查找這個(gè)庫(kù)。如果find_package()
函數(shù)沒(méi)有找到這個(gè)庫(kù),你可以使用message(WARNING)
函數(shù)來(lái)輸出一個(gè)警告消息,告訴用戶這個(gè)庫(kù)沒(méi)有找到:
find_package(SomeLibrary) if(NOT SomeLibrary_FOUND) message(WARNING "SomeLibrary not found, some features will not be available.") endif()
在這個(gè)例子中,如果CMake在配置過(guò)程中沒(méi)有找到SomeLibrary
,它會(huì)輸出一個(gè)警告消息,內(nèi)容為"SomeLibrary not found, some features will not be available."。這個(gè)警告消息會(huì)被發(fā)送到CMake的警告消息流,并在終端中顯示出來(lái),從而讓用戶知道他們可能需要安裝SomeLibrary
才能使用所有的功能。
請(qǐng)注意,message(WARNING)
函數(shù)只是輸出警告消息,它不會(huì)改變CMake的處理過(guò)程。如果你想在發(fā)生錯(cuò)誤時(shí)停止CMake的處理過(guò)程,你應(yīng)該使用message(FATAL_ERROR)
函數(shù)。
AUTHOR_WARNING
AUTHOR_WARNING
模式在CMake中用于輸出開發(fā)者警告。這種模式的警告只有在CMAKE_SUPPRESS_DEVELOPER_WARNINGS
變量為FALSE
時(shí)才會(huì)顯示。這個(gè)變量默認(rèn)為FALSE
,但如果你在CMakeLists.txt文件中設(shè)置了這個(gè)變量為TRUE
,那么AUTHOR_WARNING
模式的警告就不會(huì)顯示。
這種機(jī)制可以用于區(qū)分開發(fā)者警告和用戶警告。例如,如果你是一個(gè)庫(kù)的開發(fā)者,你可能希望在開發(fā)過(guò)程中看到所有的警告,包括開發(fā)者警告,但是你的用戶可能只關(guān)心他們需要知道的警告,不希望看到開發(fā)者警告。這時(shí),你就可以在你的CMakeLists.txt文件中使用AUTHOR_WARNING
模式來(lái)輸出開發(fā)者警告,然后告訴你的用戶設(shè)置CMAKE_SUPPRESS_DEVELOPER_WARNINGS
變量為TRUE
來(lái)隱藏這些警告。
以下是一個(gè)AUTHOR_WARNING
模式的示例:
# 如果某個(gè)變量沒(méi)有被設(shè)置,輸出一個(gè)開發(fā)者警告 if(NOT DEFINED MY_VARIABLE) message(AUTHOR_WARNING "MY_VARIABLE is not defined") endif()
在這個(gè)示例中,如果MY_VARIABLE
變量沒(méi)有被設(shè)置,CMake會(huì)輸出一個(gè)開發(fā)者警告,內(nèi)容為"MY_VARIABLE is not defined"。如果CMAKE_SUPPRESS_DEVELOPER_WARNINGS
變量被設(shè)置為TRUE
,這個(gè)警告就不會(huì)顯示。
SEND_ERROR
SEND_ERROR
模式在message()
函數(shù)中用于輸出錯(cuò)誤信息,但不會(huì)立即停止CMake的處理過(guò)程。這意味著CMake會(huì)繼續(xù)處理剩余的命令,直到遇到一個(gè)FATAL_ERROR
或者處理完所有命令。然后,CMake會(huì)以非零狀態(tài)退出,表示出現(xiàn)了錯(cuò)誤。
以下是一個(gè)SEND_ERROR
的示例:
if(NOT DEFINED REQUIRED_VARIABLE) message(SEND_ERROR "REQUIRED_VARIABLE is not defined") endif()
在這個(gè)示例中,我們首先檢查變量REQUIRED_VARIABLE
是否已經(jīng)定義。如果沒(méi)有定義,我們就使用message(SEND_ERROR ...)
輸出一條錯(cuò)誤信息。這條錯(cuò)誤信息會(huì)被發(fā)送到CMake的錯(cuò)誤消息流,并且CMake的處理過(guò)程不會(huì)立即停止。相反,CMake會(huì)繼續(xù)處理剩余的命令,直到遇到一個(gè)FATAL_ERROR
或者處理完所有命令。然后,CMake會(huì)以非零狀態(tài)退出,表示出現(xiàn)了錯(cuò)誤。
請(qǐng)注意,雖然SEND_ERROR
不會(huì)立即停止CMake的處理過(guò)程,但它會(huì)阻止生成步驟的執(zhí)行。也就是說(shuō),如果CMake在處理過(guò)程中遇到了一個(gè)SEND_ERROR
,那么即使CMake成功處理了所有命令,生成步驟也不會(huì)執(zhí)行。這是因?yàn)?code>SEND_ERROR表示了一個(gè)嚴(yán)重的問(wèn)題,需要用戶的注意和修復(fù)。
FATAL_ERROR
FATAL_ERROR
是CMake中message()
函數(shù)的一種模式,用于輸出錯(cuò)誤消息并立即停止CMake的處理過(guò)程。當(dāng)CMake遇到一個(gè)無(wú)法繼續(xù)的錯(cuò)誤時(shí),你可以使用message(FATAL_ERROR "error message")
來(lái)輸出錯(cuò)誤消息并停止處理。
例如,假設(shè)你正在編寫一個(gè)需要C++11或更高版本的項(xiàng)目,你可以使用以下代碼來(lái)檢查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()
在這個(gè)例子中,如果CMake檢測(cè)到C++編譯器的標(biāo)準(zhǔn)版本小于11,它會(huì)輸出錯(cuò)誤消息"This project requires C++11 or higher!",并立即停止處理。這意味著CMake不會(huì)生成構(gòu)建系統(tǒng),也不會(huì)執(zhí)行任何后續(xù)的CMake命令。這可以防止在不滿足項(xiàng)目要求的情況下嘗試構(gòu)建項(xiàng)目,從而避免可能的構(gòu)建錯(cuò)誤和問(wèn)題。
請(qǐng)注意,FATAL_ERROR
應(yīng)該謹(jǐn)慎使用,只有在確實(shí)需要立即停止CMake處理過(guò)程的情況下才應(yīng)使用。在大多數(shù)情況下,使用WARNING
或SEND_ERROR
模式可能更合適。
到此這篇關(guān)于Cmake中強(qiáng)大的輸出函數(shù)message解析的文章就介紹到這了,更多相關(guān)Cmake輸出函數(shù)message內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)紙牌24點(diǎn)小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)紙牌24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10C語(yǔ)言動(dòng)態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解
但是在實(shí)際的編程中,往往會(huì)發(fā)生這種情況,即所需的內(nèi)存空間取決于實(shí)際輸入的數(shù)據(jù),而無(wú)法預(yù)先確定 。為了解決上述問(wèn)題,C語(yǔ)言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要?jiǎng)討B(tài)的分配內(nèi)存空間,也可把不再使用的空間回收再次利用2022-12-12vscode遠(yuǎn)程連接服務(wù)器(免密登錄+遠(yuǎn)程開發(fā))
vscode的遠(yuǎn)程連接功能十分方便,本文就來(lái)介紹一下vscode遠(yuǎn)程連接服務(wù)器,主要包括免密登錄和遠(yuǎn)程開發(fā),感興趣的可以了解一下2024-07-07C++中l(wèi)ist的使用方法及常用list操作總結(jié)
這篇文章主要介紹了C++中l(wèi)ist的使用方法及常用list操作總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-06-06c++重載運(yùn)算符時(shí)返回值為類的對(duì)象或者返回對(duì)象的引用問(wèn)題
這篇文章主要介紹了c++重載運(yùn)算符時(shí)返回值為類的對(duì)象或者返回對(duì)象的引用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11tinyxml 常用的C++ XML解析器非常優(yōu)秀
讀取和設(shè)置xml配置文件是最常用的操作,試用了幾個(gè)C++的XML解析器,個(gè)人感覺(jué)TinyXML是使用起來(lái)最舒服的,因?yàn)樗腁PI接口和Java的十分類似,面向?qū)ο笮院芎?/div> 2012-11-11C語(yǔ)言中g(shù)etchar()與putchar()函數(shù)詳解
本文主要介紹了C語(yǔ)言中g(shù)etchar()與putchar()函數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01C語(yǔ)言模擬內(nèi)存函數(shù)分析之mencpy與memmove
這篇文章主要介紹了C語(yǔ)言詳解如何模擬內(nèi)存函數(shù),用到了mencpy與memmove兩個(gè)函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03最新評(píng)論