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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 6.5 從文件中記錄項目版本 **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-6/recipe-05 中找到,其中包含一個C++例子。該示例在CMake 3.5版(或更高版本)中是有效的,并且已經在GNU/Linux、macOS和Windows上進行過測試。* 這個示例的目的和前一個相似,但是出發點不同。我們計劃是從文件中讀取版本信息,而不是將其設置在CMakeLists.txt中。將版本保存在單獨文件中的動機,是允許其他構建框架或開發工具使用獨立于CMake的信息,而無需將信息復制到多個文件中。與CMake并行使用的構建框架的一個例子是Sphinx文檔框架,它生成文檔并將其部署到閱讀文檔服務中,以便在線提供代碼文檔。 ## 準備工作 我們將從一個名為`VERSION`的文件開始,其中包含以下內容: ```txt 2.0.1-rc-2 ``` 這一次,選擇更安全的數據類型,并將`PROGRAM_VERSION`定義為`version.hpp.in`中的字符串常量: ```c++ #pragma once #include <string> const std::string PROGRAM_VERSION = "@PROGRAM_VERSION@"; ``` 下面的源碼(`example.cpp`),將包含生成的` version.hpp`: ```c++ // provides PROGRAM_VERSION #include "version.hpp" #include <iostream> int main() { std::cout << "This is output from code v" << PROGRAM_VERSION << std::endl; std::cout << "Hello CMake world!" << std::endl; } ``` ## 具體實施 逐步來完成我們的任務: 1. CMakeLists.txt定義了最低版本、項目名稱、語言和標準: ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-05 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) ``` 2. 從文件中讀取版本信息如下: ```cmake if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION") file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" PROGRAM_VERSION) string(STRIP "${PROGRAM_VERSION}" PROGRAM_VERSION) else() message(FATAL_ERROR "File ${CMAKE_CURRENT_SOURCE_DIR}/VERSION not found") endif() ``` 3. 配置頭文件: ```cmake configure_file( version.hpp.in generated/version.hpp @ONLY ) ``` 4. 最后,定義了可執行文件及其依賴關系: ```cmake add_executable(example example.cpp) target_include_directories(example PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated ) ``` 5. 進行測試: ```cmake $ mkdir -p build $ cd build $ cmake .. $ cmake --build . $ ./example This is output from code v2.0.1-rc-2 Hello CMake world! ``` ## 工作原理 我們使用以下構造,從一個名為VERSION的文件中讀取版本字符串: ```cmake if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION") file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" PROGRAM_VERSION) string(STRIP "${PROGRAM_VERSION}" PROGRAM_VERSION) else() message(FATAL_ERROR "File ${CMAKE_CURRENT_SOURCE_DIR}/VERSION not found") endif() ``` 這里,首先檢查該文件是否存在,如果不存在,則發出錯誤消息。如果存在,將內容讀入`PROGRAM_VERSION`變量中,該變量會去掉尾部的空格。當設置了變量`PROGRAM_VERSION`,就可以使用它來配置`version.hpp.in`,生成` generated/version.hpp`: ```cmake configure_file( version.hpp.in generated/version.hpp @ONLY ) ```
                  <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>

                              哎呀哎呀视频在线观看