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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 1.6 指定編譯器 **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-01/recipe-06 中找到,其中有一個C++/C示例。該配置在CMake 3.5版(或更高版本)下測試沒問題,并且已經在GNU/Linux、macOS和Windows上進行了測試。* 目前為止,我們還沒有過多考慮如何選擇編譯器。CMake可以根據平臺和生成器選擇編譯器,還能將編譯器標志設置為默認值。然而,我們通常控制編譯器的選擇。在后面的示例中,我們還將考慮構建類型的選擇,并展示如何控制編譯器標志。 ## 具體實施 如何選擇一個特定的編譯器?例如,如果想使用Intel或Portland Group編譯器怎么辦?CMake將語言的編譯器存儲在` CMAKE_<LANG>_COMPILER`變量中,其中` <LANG> `是受支持的任何一種語言,對于我們的目的是`CXX`、`C`或`Fortran`。用戶可以通過以下兩種方式之一設置此變量: 1. 使用CLI中的`-D`選項,例如: ```shell $ cmake -D CMAKE_CXX_COMPILER=clang++ .. ``` 2. 通過導出環境變量`CXX`(C++編譯器)、`CC`(C編譯器)和`FC`(Fortran編譯器)。例如,使用這個命令使用`clang++`作為`C++`編譯器: ```shell $ env CXX=clang++ cmake .. ``` 到目前為止討論的示例,都可以通過傳遞適當的選項,配置合適的編譯器。 **NOTE**:*CMake了解運行環境,可以通過其CLI的`-D`開關或環境變量設置許多選項。前一種機制覆蓋后一種機制,但是我們建議使用`-D`顯式設置選項。顯式優于隱式,因為環境變量可能被設置為不適合(當前項目)的值。* 我們在這里假設,其他編譯器在標準路徑中可用,CMake在標準路徑中執行查找編譯器。如果不是這樣,用戶將需要將完整的編譯器可執行文件或包裝器路徑傳遞給CMake。 **TIPS**:*我們建議使用`-D CMAKE_<LANG>_COMPILER`CLI選項設置編譯器,而不是導出`CXX`、`CC`和`FC`。這是確保跨平臺并與非POSIX兼容的唯一方法。為了避免變量污染環境,這些變量可能會影響與項目一起構建的外部庫環境。* ## 工作原理 配置時,CMake會進行一系列平臺測試,以確定哪些編譯器可用,以及它們是否適合當前的項目。一個合適的編譯器不僅取決于我們所使用的平臺,還取決于我們想要使用的生成器。CMake執行的第一個測試基于項目語言的編譯器的名稱。例如,`cc`是一個工作的`C`編譯器,那么它將用作`C`項目的默認編譯器。GNU/Linux上,使用Unix Makefile或Ninja時, GCC家族中的編譯器很可能是`C++`、`C`和`Fortran`的默認選擇。Microsoft Windows上,將選擇Visual Studio中的`C++`和`C`編譯器(前提是Visual Studio是生成器)。如果選擇MinGW或MSYS Makefile作為生成器,則默認使用MinGW編譯器。 ## 更多信息 我們的平臺上的CMake,在哪里可以找到可用的編譯器和編譯器標志?CMake提供`--system-information`標志,它將把關于系統的所有信息轉儲到屏幕或文件中。要查看這個信息,請嘗試以下操作: ```shell $ cmake --system-information information.txt ``` 文件中(本例中是`information.txt`)可以看到`CMAKE_CXX_COMPILER`、`CMAKE_C_COMPILER`和`CMAKE_Fortran_COMPILER`的默認值,以及默認標志。我們將在下一個示例中看到相關的標志。 CMake提供了額外的變量來與編譯器交互: * `CMAKE_<LANG>_COMPILER_LOADED `:如果為項目啟用了語言`<LANG>`,則將設置為`TRUE`。 * `CMAKE_<LANG>_COMPILER_ID`:編譯器標識字符串,編譯器供應商所特有。例如,`GCC`用于GNU編譯器集合,`AppleClang`用于macOS上的Clang, `MSVC`用于Microsoft Visual Studio編譯器。注意,不能保證為所有編譯器或語言定義此變量。 * `CMAKE_COMPILER_IS_GNU<LANG> `:如果語言`<LANG>`是GNU編譯器集合的一部分,則將此邏輯變量設置為`TRUE`。注意變量名的`<LANG>`部分遵循GNU約定:C語言為`CC`, C++語言為`CXX`, Fortran語言為`G77`。 * `CMAKE_<LANG>_COMPILER_VERSION`:此變量包含一個字符串,該字符串給定語言的編譯器版本。版本信息在`major[.minor[.patch[.tweak]]]`中給出。但是,對于`CMAKE_<LANG>_COMPILER_ID`,不能保證所有編譯器或語言都定義了此變量。 我們可以嘗試使用不同的編譯器,配置下面的示例`CMakeLists.txt`。這個例子中,我們將使用CMake變量來探索已使用的編譯器(及版本): ```cmake cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-06 LANGUAGES C CXX) message(STATUS "Is the C++ compiler loaded? ${CMAKE_CXX_COMPILER_LOADED}") if(CMAKE_CXX_COMPILER_LOADED) message(STATUS "The C++ compiler ID is: ${CMAKE_CXX_COMPILER_ID}") message(STATUS "Is the C++ from GNU? ${CMAKE_COMPILER_IS_GNUCXX}") message(STATUS "The C++ compiler version is: ${CMAKE_CXX_COMPILER_VERSION}") endif() message(STATUS "Is the C compiler loaded? ${CMAKE_C_COMPILER_LOADED}") if(CMAKE_C_COMPILER_LOADED) message(STATUS "The C compiler ID is: ${CMAKE_C_COMPILER_ID}") message(STATUS "Is the C from GNU? ${CMAKE_COMPILER_IS_GNUCC}") message(STATUS "The C compiler version is: ${CMAKE_C_COMPILER_VERSION}") endif() ``` 注意,這個例子不包含任何目標,沒有要構建的東西,我們只關注配置步驟: ```shell $ mkdir -p build $ cd build $ cmake .. ... -- Is the C++ compiler loaded? 1 -- The C++ compiler ID is: GNU -- Is the C++ from GNU? 1 -- The C++ compiler version is: 8.1.0 -- Is the C compiler loaded? 1 -- The C compiler ID is: GNU -- Is the C from GNU? 1 -- The C compiler version is: 8.1.0 ... ``` 當然,輸出將取決于可用和已選擇的編譯器(及版本)。
                  <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>

                              哎呀哎呀视频在线观看