<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國際加速解決方案。 廣告
                # 6.6 配置時記錄Git Hash值 **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-6/recipe-06 中找到,其中包含一個C++例子。該示例在CMake 3.5版(或更高版本)中是有效的,并且已經在GNU/Linux、macOS和Windows上進行過測試。* 大多數現代源代碼存儲庫都使用Git作為版本控制系統進行跟蹤,這可以歸功于存儲庫托管平臺GitHub的流行。因此,我們將在本示例中使用Git;然而,實際中會根據具體的動機和實現,可以轉化為其他版本控制系統。我們以Git為例,提交的Git Hash決定了源代碼的狀態。因此,為了標記可執行文件,我們將嘗試將Git Hash記錄到可執行文件中,方法是將哈希字符串記錄在一個頭文件中,該頭文件可以包含在代碼中。 ## 準備工作 我們需要兩個源文件,類似于前面的示例。其中一個將配置記錄的Hash(`version.hpp.in`),詳情如下: ```c++ #pragma once #include <string> const std::string GIT_HASH = "@GIT_HASH@"; ``` 還需要一個示例源文件(`example.cpp`),將Hash打印到屏幕上: ```c++ #include "version.hpp" #include <iostream> int main() { std::cout << "This code has been configured from version " << GIT_HASH << std::endl; } ``` 此示例還假定在Git存儲庫中至少有一個提交。因此,使用`git init`初始化這個示例,并使用`git add <filename>`,然后使用`git commit`創建提交,以便獲得一個有意義的示例。 ## 具體實施 下面演示了從Git記錄版本信息的步驟: 1. 定義項目和支持語言: ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-06 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) ``` 2. 定義`GIT_HASH`變量: ```cmake # in case Git is not available, we default to "unknown" set(GIT_HASH "unknown") # find Git and if available set GIT_HASH variable find_package(Git QUIET) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) endif() message(STATUS "Git hash is ${GIT_HASH}") ``` 3. `CMakeLists.txt`剩余的部分,類似于之前的示例: ```cmake # generate file version.hpp based on version.hpp.in configure_file( version.hpp.in generated/version.hpp @ONLY ) # example code add_executable(example example.cpp) # needs to find the generated header file target_include_directories(example PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated ) ``` 4. 驗證輸出(Hash不同): ```shell $ mkdir -p build $ cd build $ cmake .. $ cmake --build . $ ./example This code has been configured from version d58c64f ``` ## 工作原理 使用`find_package(Git QUIET)`來檢測系統上是否有可用的Git。如果有(`GIT_FOUND`為`True`),運行一個Git命令: `${GIT_EXECUTABLE} log -1 --pretty=format:%h`。這個命令給出了當前提交Hash的簡短版本。當然,這里我們可以靈活地運行Git命令。我們要求`execute_process`命令將結果放入名為`GIT_HASH`的變量中,然后刪除任何尾隨的空格。使用`ERROR_QUIET`,如果Git命令由于某種原因失敗,我們不會停止配置。 由于Git命令可能會失敗(源代碼已經分發到Git存儲庫之外),或者Git在系統上不可用,我們希望為這個變量設置一個默認值,如下所示: ```cmake set(GIT_HASH "unknown") ``` 此示例有一個問題,Git Hash是在配置時記錄的,而不是在構建時記錄。下一個示例中,我們將演示如何實現后一種方法。
                  <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>

                              哎呀哎呀视频在线观看