簡體   English   中英

BOOST_INCLUDEDIR和BOOST_LIBRARYDIR不同時的find_package(Boost)錯誤

[英]find_package(Boost) error when BOOST_INCLUDEDIR & BOOST_LIBRARYDIR are different

我正在嘗試將Boost編譯為共享庫,並使它們成為我的跨平台 CMake項目的依賴項。

為此,我為win32,x64和Linux編譯了boost,其中boost文件夾結構如下所示:

- boost_1_69_0/
  - boost/
  - stage/
    - win32
      - lib
    - x64
      - lib
    - linux
      - lib

然后我在做:

set(BOOST_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0)
set(BOOST_LIBRARYDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0/stage/win32)
find_package(Boost REQUIRED COMPONENTS filesystem)

得到:

CMake Error at C:/Program Files/CMake/share/cmake-3.13/Modules/FindBoost.cmake:2100 (message):
Unable to find the requested Boost libraries.

Boost version: 1.69.0

Boost include path: C:/bla/SW/cmake-template/external/boost_1_69_0

Could not find the following Boost libraries:

        boost_filesystem

那是個錯誤嗎?


如果我將lib文件夾從win32內部移動到其父目錄,即:

- boost_1_69_0/
  - boost/
  - stage/
    - lib

這是boost的b2構建東西的默認方式,然后一切正常。 但是,我不能為不同的平台使用不同的boost二進制文件。


編輯

使用set(Boost_DEBUG ON)我發現我的Boost是在項目使用v140時使用Visual Studio v141工具集編譯的,因此FindBoost在尋找boost_filesystem-vc140-mt-x64-1_69而不是boost_filesystem-vc140-mt-x64-1_69

我猜問題已經轉移到要么找到一種方法來強制搜索v141,要么(更好)使用--layout=system並找到一種方法來迫使它始終尋找boost_filesystem 有辦法嗎?

這里的問題是CMake搜索與某個命名方案匹配的boost庫。 您的庫與此不同,因為文件名中編碼了一些選項。 您有兩種選擇:

  1. 運行b2可執行文件時,再次使用--layout=system標志再次編譯boost。 這將創建具有標准名稱(例如boost_filesystem.dllboost_filesystem.lib庫文件。
  2. 使用以下專用於增強變體的變量為CMake提供一些有關如何命名庫文件的提示(由於我沒有像您這樣的等效系統,因此可能是猜測,您可能必須采用):
    • Boost_ARCHITECTURE="-x32"
    • Boost_COMPILER="-vc141"

暫無
暫無

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

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