<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國際加速解決方案。 廣告
                # 3.1 檢測Python解釋器 **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-03/recipe-01 中找到。該示例在CMake 3.5版(或更高版本)中是有效的,并且已經在GNU/Linux、macOS和Windows上進行過測試。* Python是一種非常流行的語言。許多項目用Python編寫的工具,從而將主程序和庫打包在一起,或者在配置或構建過程中使用Python腳本。這種情況下,確保運行時對Python解釋器的依賴也需要得到滿足。本示例將展示如何檢測和使用Python解釋器。 我們將介紹`find_package`命令,這個命令將貫穿本章。 ## 具體實施 我們將逐步建立`CMakeLists.txt`文件: 1. 首先,定義CMake最低版本和項目名稱。注意,這里不需要任何語言支持: ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-01 LANGUAGES NONE) ``` 2. 然后,使用`find_package`命令找到Python解釋器: ```cmake find_package(PythonInterp REQUIRED) ``` 3. 然后,執行Python命令并捕獲它的輸出和返回值: ```cmake execute_process( COMMAND ${PYTHON_EXECUTABLE} "-c" "print('Hello, world!')" RESULT_VARIABLE _status OUTPUT_VARIABLE _hello_world ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) ``` 4. 最后,打印Python命令的返回值和輸出: ```cmake message(STATUS "RESULT_VARIABLE is: ${_status}") message(STATUS "OUTPUT_VARIABLE is: ${_hello_world}") ``` 5. 配置項目: ```shell $ mkdir -p build $ cd build $ cmake .. -- Found PythonInterp: /usr/bin/python (found version "3.6.5") -- RESULT_VARIABLE is: 0 -- OUTPUT_VARIABLE is: Hello, world! -- Configuring done -- Generating done -- Build files have been written to: /home/user/cmake-cookbook/chapter-03/recipe-01/example/build ``` ## 工作原理 `find_package`是用于發現和設置包的CMake模塊的命令。這些模塊包含CMake命令,用于標識系統標準位置中的包。CMake模塊文件稱為` Find<name>.cmake`,當調用`find_package(<name>)`時,模塊中的命令將會運行。 除了在系統上實際查找包模塊之外,查找模塊還會設置了一些有用的變量,反映實際找到了什么,也可以在自己的`CMakeLists.txt`中使用這些變量。對于Python解釋器,相關模塊為`FindPythonInterp.cmake`附帶的設置了一些CMake變量: * **PYTHONINTERP_FOUND**:是否找到解釋器 * **PYTHON_EXECUTABLE**:Python解釋器到可執行文件的路徑 * **PYTHON_VERSION_STRING**:Python解釋器的完整版本信息 * **PYTHON_VERSION_MAJOR**:Python解釋器的主要版本號 * **PYTHON_VERSION_MINOR** :Python解釋器的次要版本號 * **PYTHON_VERSION_PATCH**:Python解釋器的補丁版本號 可以強制CMake,查找特定版本的包。例如,要求Python解釋器的版本大于或等于2.7:`find_package(PythonInterp 2.7)` 可以強制滿足依賴關系: ```cmake find_package(PythonInterp REQUIRED) ``` 如果在查找位置中沒有找到適合Python解釋器的可執行文件,CMake將中止配置。 **TIPS**:*CMake有很多查找軟件包的模塊。我們建議在CMake在線文檔中查詢`Find<package>.cmake`模塊,并在使用它們之前詳細閱讀它們的文檔。`find_package`命令的文檔可以參考 https://cmake.org/cmake/help/v3.5/command/find_ackage.html 。在線文檔的一個很好的替代方法是瀏覽 https://github.com/Kitware/CMake/tree/master/Modules 中的CMake模塊源代碼——它們記錄了模塊使用的變量,以及模塊可以在`CMakeLists.txt`中使用的變量。* ## 更多信息 軟件包沒有安裝在標準位置時,CMake無法正確定位它們。用戶可以使用CLI的`-D`參數傳遞相應的選項,告訴CMake查看特定的位置。Python解釋器可以使用以下配置: ```shell $ cmake -D PYTHON_EXECUTABLE=/custom/location/python .. ``` 這將指定非標準`/custom/location/python`安裝目錄中的Python可執行文件。 **NOTE**:*每個包都是不同的,`Find<package>.cmake`模塊試圖提供統一的檢測接口。當CMake無法找到模塊包時,我們建議您閱讀相應檢測模塊的文檔,以了解如何正確地使用CMake模塊。可以在終端中直接瀏覽文檔,本例中可使用`cmake --help-module FindPythonInterp`查看。* 除了檢測包之外,我們還想提到一個便于打印變量的helper模塊。本示例中,我們使用了以下方法: ```cmake message(STATUS "RESULT_VARIABLE is: ${_status}") message(STATUS "OUTPUT_VARIABLE is: ${_hello_world}") ``` 使用以下工具進行調試: ```cmake include(CMakePrintHelpers) cmake_print_variables(_status _hello_world) ``` 將產生以下輸出: ```shell -- _status="0" ; _hello_world="Hello, world!" ``` 有關打印屬性和變量的更多信息,請參考 https://cmake.org/cmake/help/v3.5/module/CMakePrintHelpers.html 。
                  <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>

                              哎呀哎呀视频在线观看