簡體   English   中英

CMake ExternalProject的目標名稱用於跨平台庫依賴

[英]Target names with CMake ExternalProject for cross platform libraries dependency

我正在嘗試創建一個CMakeLists ,它將自動下載並編譯一個庫, linklink到Windows和Linux上的另一個項目。 為此,我使用ExternalProject_Add 下載和編譯部分很好,但是,在Windows上創建的庫稱為zlibd.lib而在Linux上稱為zlib.a

這是我的代碼:

if (NOT Zlib_FOUND)
    message(STATUS "Zlib has not been found. Therefore it will automatically be downloaded during the compilation process.")
    ExternalProject_Add(Zlib
        SOURCE_DIR "${PROJECT_BINARY_DIR}/deps/zlib"
        BINARY_DIR "${PROJECT_BINARY_DIR}/deps/zlib-build"
        INSTALL_DIR "${PROJECT_BINARY_DIR}/deps/zlib-install"
        GIT_REPOSITORY "${git_protocol}://github.com/madler/zlib.git"
        GIT_TAG "50893291621658f355bc5b4d450a8d06a563053d"
        CMAKE_ARGS
            -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
            -DINSTALL_BIN_DIR:PATH=<INSTALL_DIR>/bin
            -DINSTALL_INC_DIR:PATH=<INSTALL_DIR>/include
            -DINSTALL_LIB_DIR:PATH=<INSTALL_DIR>/lib
            -DINSTALL_MAN_DIR:PATH=<INSTALL_DIR>/share/man
            -DINSTALL_PKGCONFIG_DIR:PATH=<INSTALL_DIR>/share/pkgconfig)
    ExternalProject_Get_Property(Zlib install_dir)
    set(ZLIB_LIB_DIR ${install_dir}/lib)
    set(ZLIB_INC_DIR ${install_dir}/include)
    set(ZLIB_BIN_DIR ${install_dir}/bin)

    add_library(zlib STATIC IMPORTED)
    set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_LIB_DIR}/zlibd.lib)

endif()

但是,這里我為Windows的庫名稱進行了硬編碼,因此當我想在Linux上編譯它時,找不到該庫。

如何根據平台(如果可能的話,不對其進行硬編碼)找到合適的庫名?

謝謝。

編輯:是否有可能從ExternalProject獲取目標? (具有getproperty或類似的東西?)還是最終以另一種方式執行,強制ExternalProject以給定名稱輸出目標?

為此,通常使用find_library

find_library(ZLIB_LIBRARY NAMES foo PATHS ${ZLIB_LIB_DIR})
add_library(zlib STATIC IMPORTED)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION "${ZLIB_LIBRARY}")

通過這種方式,它會尋找libzlib.a Linux和zlib.lib在Windows上。

但是,您的庫的名稱似乎是非常具體的,並且沒有遵循明顯的命名方案,這使CMake很難自動找到庫(無需對名稱進行硬編碼)。

您可能感興趣的另一種選擇是將ExternalProject_Add與CMake的管理依賴項功能結合在一起,就像在本項目中所做的那樣,並在本博客文章中進行了介紹 如果您采用這種方法,則可以只使用導入項目的CMakeLists.txt中定義的zlib目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM