在CLion中配置Boost库

这是我第一次使用Boost lib,所以我当然遇到了问题:

首先,这是我的项目的CMAKELISTS.txt:

$list | ForEach-Object address # PSv2: | ForEach-Object { $_.address }
# OR
$list | Select-Object -ExpandProperty address

注意:我已经构建了BOOST库! =========================================== 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) 在MyStringTest.cpp中,我有:

enter code here

构建项目时出现的错误:

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

我的配置有什么问题? 而我需要做些什么来解决它?

song47295743 回答:在CLion中配置Boost库

代码告诉链接器将该库../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)

然后,查找模块将为您填充导入的目标,您可以像这样链接到它们:

target_link_libraries(Boost_Tests_run PUBLIC Boost::filesystem)

我建议看一下此page上的一些示例。

本文链接:https://www.f2er.com/2977734.html

大家都在问