簡體   English   中英

在 CLion 中配置 Boost 庫

[英]Configuring Boost Library in CLion

這是我第一次使用 Boost lib,所以我當然遇到了問題:

首先這是我項目的 CMAKELISTS.txt:

    ===========================================
    src/CMAKELISTS.txt:
    =========================================== 
    cmake_minimum_required(VERSION 3.15)
    project(My_String)

    set(CMAKE_CXX_STANDARD 17)
    set(SOURCE_FILES MyString.cpp MyString.h main.cpp)

    add_executable(My_String_src ${SOURCE_FILES})
    ===========================================
    test/CMAKELISTS.txt:
    ===========================================
    cmake_minimum_required(VERSION 3.15)
    project(My_String)

    set(CMAKE_CXX_STANDARD 17)
    set(Boost_USE_STATIC_LIBS OFF)
    set(SOURCE_FILES MyStringTest.cpp)
    set(Boost_INCLUDE_DIR "C:\\Program Files\\Boost\\boost_1_71_0")
    set(Boost_LIBRARIES "C:\\Program Files\\Boost\\boost_1_71_0")

    find_package (Boost COMPONENTS unit_test_framework)

    include_directories(${Boost_INCLUDE_DIR})
    include_directories(../src)

    add_executable (Boost_Tests_run ${SOURCE_FILES})

    target_link_libraries (Boost_Tests_run ${Boost_LIBRARIES})
    ==============================================
    top_level CMAKELISTS.txt for the whole project:
    ==============================================
    cmake_minimum_required(VERSION 3.15)
    project(My_String)

    set(CMAKE_CXX_STANDARD 17)

    add_subdirectory(src)
    add_subdirectory(test)

注意:我已經構建了 BOOST 庫! enter code here在 MyStringTest.cpp 中,我有:

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE MyString_Test_Suite

#include <iostream>
#include "MyString.h"
#include "MyString.cpp"
#include <boost/test/unit_test.hpp>

我在構建項目時遇到的錯誤:

    [ 50%] Building CXX object test/CMakeFiles/Boost_Tests_run.dir/MyStringTest.cpp.obj
    [100%] Linking CXX executable Boost_Tests_run.exe
    C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\ar.exe: unable to rename 'CMakeFiles\Boost_Tests_run.dir/objects.a'; reason: File exists
    mingw32-make.exe[3]: *** [test\CMakeFiles\Boost_Tests_run.dir\build.make:86: test/Boost_Tests_run.exe] Error 1
    mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:141: test/CMakeFiles/Boost_Tests_run.dir/all] Error 2
    mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:148: test/CMakeFiles/Boost_Tests_run.dir/rule] Error 2
    mingw32-make.exe: *** [Makefile:130: Boost_Tests_run] Error 2

我的配置有什么問題? 我需要做什么來修復它?

代碼告訴鏈接器將此庫../src鏈接到您的可執行文件。 這是一個無效的操作,所以刪除這一行:

target_link_libraries(Boost_Tests_run ../src)

target_link_libraries()的參數保留用於目標庫名稱(包括庫文件的完整路徑)。 ../src參數不符合這兩個條件中的任何一個,因為它只是一個目錄。


編輯:另一個潛在問題是您的Boost_LIBRARIES變量。 同樣,如果它只包含目錄路徑,則不應將其提供給target_link_libraries() 它應該包含庫的完整路徑,包括庫名稱。

但是,現代FindBoost.cmake模塊提供了更好的方法。 如果您知道要使用的 Boost 組件(例如filesystem ),您應該在find_package()調用中指定這些組件:

find_package(Boost REQUIRED COMPONENTS filesystem)

然后, find 模塊將為您填充導入的目標,您可以像這樣鏈接到它們:

target_link_libraries(Boost_Tests_run PUBLIC Boost::filesystem)

我建議看看這個頁面上的一些例子。

暫無
暫無

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

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