使用 CMake 链接 GSL,未定义符号

问题描述

我正在尝试使用 cmake 将 GSL 链接到我的 C++ 代码,一切顺利,直到我尝试构建。 CMakeLists.txt:

cmake_minimum_required(VERSION 3.9)

include_directories(${project_SOURCE_DIR}/src)
link_directories(${project_BINARY_DIR}/src)

FIND_PACKAGE(Boost COMPONENTS system filesystem unit_test_framework required )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )

find_package(GSL required)

set(CMAKE_CXX_STANDARD 14)

set (lib_SOURCES
    ../src/file.h
    ../src/file.cpp
    # etc
     )

target_include_directories(project PRIVATE ${PROJECT_SOURCE_DIR} ${GSL_INCLUDE_DIR})

target_link_libraries(sigma OpenMP::OpenMP_CXX GSL::gsl GSL:gslcblas)

当我添加 #include <gsl/gsl_integration.h> 并从 C++ 库中调用某些内容时,例如 gsl_integration_workspace * w = gsl_integration_workspace_alloc (1000);,在 make 我得到一个 Undefined symbols for architecture x86_64:...,所以图书馆没有链接,但我不知道为什么。 CMake 清楚地识别 GSL,但不喜欢它。

我使用的是 Big Sur 11.3.1,通过自制软件安装了 GSL 2.6。

解决方法

通过删除我的 CMakeCache.txt 文件并再次运行 cmake 来解决此问题。

我在准备最小的工作示例以响应 Tsyvarev 的评论时意识到这一点。我希望这可以帮助某人。