在cmakelists.txt中链接GSL
Linking GSL in CMakeLists.txt
我有一个带有多个文件的代码,该代码使用GSL库。当我通过命令
对代码编译代码时g++ main.cpp -lm -lgsl -lgslcblas -o Exec
此编译并给出正确的输出,没有错误。但是,当我尝试在Clion中构建代码时,我会收到错误
undefined reference to `gsl_rng_uniform'
我已经通过cmakelists.txt链接了我的代码中的各种.cpp文件,但是我认为,我必须采用类似的标志,才能链接到GSL。我的cmakelists.txt文件如下如下(源文件中仅包含.cpp文件,而不是.h文件(:
cmake_minimum_required(VERSION 3.7)
project(Unitsv1)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp
transition.cpp
random.cpp)
add_executable(Unitsv1 ${SOURCE_FILES})
我是C 的新手,似乎在网上找不到任何答案。谢谢
您尚未在GSL库中链接,因此链接器找不到其提供的任何符号。这样的东西应该使您大部分时间:
cmake_minimum_required(VERSION 3.7)
project(Unitsv1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES) # See below (1)
set(SOURCE_FILES main.cpp
transition.cpp
random.cpp)
add_executable(Unitsv1 ${SOURCE_FILES})
find_package(GSL REQUIRED) # See below (2)
target_link_libraries(Unitsv1 GSL::gsl GSL::gslcblas)
如果您的代码使用C 11,则需要(1(的行以确保实际获得C 11支持。如果没有CMAKE_CXX_STANDARD_REQUIRED YES
,CMAKE_CXX_STANDARD
变量仅作为"如果可用,则使用它,或者落回编译器可以提供的最接近标准"。如果您很好奇,您可以在此处找到详细的文章。
对您的问题的最重要部分是(2(。find_package()
命令查找GSL库等,并使它们可作为导入目标GSL::gsl
和GSL::gslcblas
提供。然后,您使用target_link_libraries()
将您的可执行文件链接到它们,如图所示。cmake文档说明了 find_package()
侧的详细范围:
- 从这里开始:
find_package()
- GSL的具体细节:
FindGSL
模块 - 链接:
target_link_libraries()
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 将gsl c++程序与"英特尔MKL"链接
- 在cmakelists.txt中链接GSL
- 代码块 gsl 问题(可能是链接)
- 在 Eclipse 中链接 GSL 库时未定义的引用
- 在Linux上使用MXE - GSL链接进行交叉编译