<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.9 檢測外部庫:Ⅰ. 使用pkg-config **NOTE**:*此示例代碼可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-03/recipe-09 中找到,包含一個C的示例。該示例在CMake 3.6版(或更高版本)中是有效的,并且已經在GNU/Linux、macOS和Windows上進行過測試。https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-03/recipe-09 中也有一個適用于CMake 3.5的示例。* 目前為止,我們已經討論了兩種檢測外部依賴關系的方法: * 使用CMake自帶的`find-module`,但并不是所有的包在CMake的`find`模塊都找得到。 * 使用` <package>Config.cmake`, ` <package>ConfigVersion.cmake `和`<package>Targets.cmake`,這些文件由軟件包供應商提供,并與軟件包一起安裝在標準位置的cmake文件夾下。 如果某個依賴項既不提供查找模塊,也不提供供應商打包的CMake文件,該怎么辦?在這種情況下,我們只有兩個選擇: * 依賴`pkg-config`程序,來找到系統上的包。這依賴于包供應商在`.pc`配置文件中,其中有關于發行包的元數據。 * 為依賴項編寫自己的`find-package`模塊。 本示例中,將展示如何利用CMake中的`pkg-config`來定位ZeroMQ消息庫。下一個示例中,將編寫一個find模塊,展示如何為ZeroMQ編寫屬于自己`find`模塊。 ## 準備工作 我們構建的代碼來自ZeroMQ手冊 http://zguide.zeromq.org/page:all 的示例。由兩個源文件`hwserver.c`和`hwclient.c`組成,這兩個源文件將構建為兩個獨立的可執行文件。執行時,它們將打印“Hello, World”。 ## 具體實施 這是一個C項目,我們將使用C99標準,逐步構建`CMakeLists.txt`文件: 1. 聲明一個C項目,并要求符合C99標準: ```cmake cmake_minimum_required(VERSION 3.6 FATAL_ERROR) project(recipe-09 LANGUAGES C) set(CMAKE_C_STANDARD 99) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_STANDARD_REQUIRED ON) ``` 2. 使用CMake附帶的find-module,查找`pkg-config`。這里在`find_package`中傳遞了`QUIET`參數。只有在沒有找到`pkg-config`時,CMake才會報錯: ```cmake find_package(PkgConfig REQUIRED QUIET) ``` 3. 找到`pkg-config`時,我們將使用`pkg_search_module`函數,以搜索任何附帶包配置`.pc`文件的庫或程序。該示例中,我們查找ZeroMQ庫: ```cmake pkg_search_module( ZeroMQ REQUIRED libzeromq libzmq lib0mq IMPORTED_TARGET ) ``` 4. 如果找到ZeroMQ庫,則打印狀態消息: ```cmake if(TARGET PkgConfig::ZeroMQ) message(STATUS "Found ZeroMQ") endif() ``` 5. 然后,添加兩個可執行目標,并鏈接到ZeroMQ。這將自動設置包括目錄和鏈接庫: ```cmake add_executable(hwserver hwserver.c) target_link_libraries(hwserver PkgConfig::ZeroMQ) add_executable(hwclient hwclient.c) target_link_libraries(hwclient PkgConfig::ZeroMQ) ``` 6. 現在,我們可以配置和構建示例: ```shell $ mkdir -p build $ cd build $ cmake .. $ cmake --build . ``` 7. 在終端中,啟動服務器,啟動時會輸出類似于本例的消息: ```shell Current 0MQ version is 4.2.2 ``` 8. 然后,在另一個終端啟動客戶端,它將打印如下內容: ```shell Connecting to hello world server… Sending Hello 0… Received World 0 Sending Hello 1… Received World 1 Sending Hello 2… ... ``` ## 工作 當找到`pkg-config`時, CMake需要提供兩個函數,來封裝這個程序提供的功能: * `pkg_check_modules`,查找傳遞列表中的所有模塊(庫和/或程序) * `pkg_search_module`,要在傳遞的列表中找到第一個工作模塊 與`find_package`一樣,這些函數接受`REQUIRED`和`QUIET`參數。更詳細地說,我們對`pkg_search_module`的調用如下: ```cmake pkg_search_module( ZeroMQ REQUIRED libzeromq libzmq lib0mq IMPORTED_TARGET ) ``` 這里,第一個參數是前綴,它將用于命名存儲搜索ZeroMQ庫結果的目標:`PkgConfig::ZeroMQ`。注意,我們需要為系統上的庫名傳遞不同的選項:`libzeromq`、`libzmq`和`lib0mq`。這是因為不同的操作系統和包管理器,可為同一個包選擇不同的名稱。 **NOTE**:*`pkg_check_modules`和`pkg_search_module`函數添加了`IMPORTED_TARGET`選項,并在CMake 3.6中定義導入目標的功能。3.6之前的版本,只定義了變量`ZeroMQ_INCLUDE_DIRS`(用于include目錄)和`ZeroMQ_LIBRARIES`(用于鏈接庫),供后續使用。*
                  <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>

                              哎呀哎呀视频在线观看