<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 7.2 將CMake源代碼分成模塊 **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-7/recipe-02 中找到。該示例在CMake 3.5版(或更高版本)中是有效的,并且已經在GNU/Linux、macOS和Windows上進行過測試。* 項目通常從單個`CMakeLists.txt`文件開始,隨著時間的推移,這個文件會逐漸增長。本示例中,我們將演示一種將`CMakeLists.txt`分割成更小單元的機制。將`CMakeLists.txt`拆分為模塊有幾個動機,這些模塊可以包含在主`CMakeLists.txt`或其他模塊中: * 主`CMakeLists.txt`更易于閱讀。 * CMake模塊可以在其他項目中重用。 * 與函數相結合,模塊可以幫助我們限制變量的作用范圍。 本示例中,我們將演示如何定義和包含一個宏,該宏允許我們獲得CMake的彩色輸出(用于重要的狀態消息或警告)。 ## 準備工作 本例中,我們將使用兩個文件,主`CMakeLists.txt`和`cmake/colors.cmake`: ```shell . ├── cmake │ └── colors.cmake └── CMakeLists.txt ``` ` cmake/colors.cmake`文件包含彩色輸出的定義: ```cmake # colorize CMake output # code adapted from stackoverflow: http://stackoverflow.com/a/19578320 # from post authored by https://stackoverflow.com/users/2556117/fraser macro(define_colors) if(WIN32) # has no effect on WIN32 set(ColourReset "") set(ColourBold "") set(Red "") set(Green "") set(Yellow "") set(Blue "") set(Magenta "") set(Cyan "") set(White "") set(BoldRed "") set(BoldGreen "") set(BoldYellow "") set(BoldBlue "") set(BoldMagenta "") set(BoldCyan "") set(BoldWhite "") else() string(ASCII 27 Esc) set(ColourReset "${Esc}[m") set(ColourBold "${Esc}[1m") set(Red "${Esc}[31m") set(Green "${Esc}[32m") set(Yellow "${Esc}[33m") set(Blue "${Esc}[34m") set(Magenta "${Esc}[35m") set(Cyan "${Esc}[36m") set(White "${Esc}[37m") set(BoldRed "${Esc}[1;31m") set(BoldGreen "${Esc}[1;32m") set(BoldYellow "${Esc}[1;33m") set(BoldBlue "${Esc}[1;34m") set(BoldMagenta "${Esc}[1;35m") set(BoldCyan "${Esc}[1;36m") set(BoldWhite "${Esc}[1;37m") endif() endmacro() ``` ## 具體實施 來看下我們如何使用顏色定義,來生成彩色狀態消息: 1. 從一個熟悉的頭部開始: ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-02 LANGUAGES NONE) ``` 2. 然后,將`cmake`子目錄添加到CMake模塊搜索的路徑列表中: ```cmake list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") ``` 3. 包括` colors.cmake`模塊,調用其中定義的宏: ```cmake include(colors) define_colors() ``` 4. 最后,打印了不同顏色的信息: ```cmake message(STATUS "This is a normal message") message(STATUS "${Red}This is a red${ColourReset}") message(STATUS "${BoldRed}This is a bold red${ColourReset}") message(STATUS "${Green}This is a green${ColourReset}") message(STATUS "${BoldMagenta}This is bold${ColourReset}") ``` 5. 測試一下(如果使用macOS或Linux,以下的輸出應該出現屏幕上):<img src="../../images/chapter7/7-2-1.png" /> ## 工作原理 這個例子中,不需要編譯代碼,也不需要語言支持,我們已經用` LANGUAGES NONE `明確了這一點: ```cmake project(recipe-02 LANGUAGES NONE) ``` 我們定義了`define_colors`宏,并將其放在`cmake/colors.cmake`。因為還是希望使用調用宏中定義的變量,來更改消息中的顏色,所以我們選擇使用宏而不是函數。我們使用以下行包括宏和調用`define_colors`: ```cmake include(colors) define_colors() ``` 我們還需要告訴CMake去哪里查找宏: ```cmae list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") ``` `include(colors)`命令指示CMake搜索`${CMAKE_MODULE_PATH}`,查找名稱為`colors.cmake`的模塊。 例子中,我們沒有按以下的方式進行: ```cmake list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(colors) ``` 而是使用一個顯式包含的方式: ```cmake include(cmake/colors.cmake) ``` ## 更多信息 推薦的做法是在模塊中定義宏或函數,然后調用宏或函數。將包含模塊用作函數調用不是很好的方式。除了定義函數和宏以及查找程序、庫和路徑之外,包含模塊不應該做更多的事情。實際的`include`命令不應該定義或修改變量,其原因是重復的`include`(可能是偶然的)不應該引入任何不想要的副作用。在第5節中,我們將創建一個防止多次包含的保護機制。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看