<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 1.4 用條件句控制編譯 **NOTE**:*這個示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-01/recipe-04 找到,其中有一個C++示例。該配置在CMake 3.5版(或更高版本)測試有效的,并且已經在GNU/Linux、macOS和Windows上進行了測試。* 目前為止,看到的示例比較簡單,CMake執行流是線性的:從一組源文件到單個可執行文件,也可以生成靜態庫或動態庫。為了確保完全控制構建項目、配置、編譯和鏈接所涉及的所有步驟的執行流,CMake提供了自己的語言。本節中,我們將探索條件結構`if-else- else-endif`的使用。 **NOTE**: *CMake語言相當龐雜,由基本的控制結構、特定于CMake的命令和使用新函數模塊化擴展語言的基礎設施組成。完整的概覽可以在這里找到: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html* ## 具體實施 從與上一個示例的的源代碼開始,我們希望能夠在不同的兩種行為之間進行切換: 1. 將` Message.hpp`和`Message.cpp`構建成一個庫(靜態或動態),然后將生成庫鏈接到`hello-world`可執行文件中。 2. 將`Message.hpp`,`Message.cpp`和`hello-world.cpp`構建成一個可執行文件,但不生成任何一個庫。 讓我們來看看如何使用`CMakeLists.txt`來實現: 1. 首先,定義最低CMake版本、項目名稱和支持的語言: ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-04 LANGUAGES CXX) ``` 2. 我們引入了一個新變量`USE_LIBRARY`,這是一個邏輯變量,值為`OFF`。我們還打印了它的值: ```cmake set(USE_LIBRARY OFF) message(STATUS "Compile sources into a library? ${USE_LIBRARY}") ``` 3. CMake中定義`BUILD_SHARED_LIBS`全局變量,并設置為`OFF`。調用`add_library`并省略第二個參數,將構建一個靜態庫: ```cmake set(BUILD_SHARED_LIBS OFF) ``` 4. 然后,引入一個變量`_sources`,包括`Message.hpp`和`Message.cpp`: ```cmake list(APPEND _sources Message.hpp Message.cpp) ``` 5. 然后,引入一個基于`USE_LIBRARY`值的`if-else`語句。如果邏輯為真,則` Message.hpp`和`Message.cpp`將打包成一個庫: ```cmake if(USE_LIBRARY) # add_library will create a static library # since BUILD_SHARED_LIBS is OFF add_library(message ${_sources}) add_executable(hello-world hello-world.cpp) target_link_libraries(hello-world message) else() add_executable(hello-world hello-world.cpp ${_sources}) endif() ``` 6. 我們可以再次使用相同的命令集進行構建。由于`USE_LIBRARY`為`OFF`, `hello-world`可執行文件將使用所有源文件來編譯。可以通過在GNU/Linux上,運行`objdump -x`命令進行驗證。 ##工作原理 我們介紹了兩個變量:`USE_LIBRARY`和`BUILD_SHARED_LIBS`。這兩個變量都設置為`OFF`。如CMake語言文檔中描述,邏輯真或假可以用多種方式表示: * 如果將邏輯變量設置為以下任意一種:`1`、`ON`、`YES`、`true`、`Y`或非零數,則邏輯變量為`true`。 * 如果將邏輯變量設置為以下任意一種:`0`、`OFF`、`NO`、`false`、`N`、`IGNORE、NOTFOUND`、空字符串,或者以`-NOTFOUND`為后綴,則邏輯變量為`false`。 `USE_LIBRARY`變量將在第一個和第二個行為之間切換。`BUILD_SHARED_LIBS`是CMake的一個全局標志。因為CMake內部要查詢`BUILD_SHARED_LIBS`全局變量,所以`add_library`命令可以在不傳遞`STATIC/SHARED/OBJECT`參數的情況下調用;如果為`false`或未定義,將生成一個靜態庫。 這個例子說明,可以引入條件來控制CMake中的執行流。但是,當前的設置不允許從外部切換,不需要手動修改`CMakeLists.txt`。原則上,我們希望能夠向用戶開放所有設置,這樣就可以在不修改構建代碼的情況下調整配置,稍后將展示如何做到這一點。 **NOTE**:*`else()`和`endif()`中的`()`,可能會讓剛開始學習CMake代碼的同學感到驚訝。其歷史原因是,因為其能夠指出指令的作用范圍。例如,可以使用`if(USE_LIBRARY)…else(USE_LIBRARY)…endif(USE_LIBIRAY)`。這個格式并不唯一,可以根據個人喜好來決定使用哪種格式。* **TIPS**:*`_sources`變量是一個局部變量,不應該在當前范圍之外使用,可以在名稱前加下劃線。*
                  <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>

                              哎呀哎呀视频在线观看