【发布时间】:2016-10-19 14:05:05
【问题描述】:
我安装了 GSL 并且 include<gsl/...> 不会让编译器抱怨,但是当我 make 代码并且它想实际从 gsl 调用 gsl_sf_lnpoch 函数时,它会抱怨
对 `gsl_sf_lnpoch' 的未定义引用
我用 Google 搜索,结果发现安装 GSL 是不够的,我需要链接 CMake 和 GSL。我正在基于某人的程序构建基础,但不熟悉 CMake 的工作原理,并且被这个愚蠢的部分所困扰。如果有人告诉我需要在下面的 CMakeLists.txt 文件中添加什么以链接 make 和 gsl,我将不胜感激。
cmake_minimum_required(VERSION 2.8.7)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
include(AppendCompilerFlags)
project(k CXX C)
set(CMAKE_BUILD_TYPE "Release")
#set(CMAKE_BUILD_TYPE "Debug")
# C++11 compiler Check
if(NOT CMAKE_CXX_COMPILER_VERSION) # work around for cmake versions smaller than 2.8.10
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION)
endif()
if(CMAKE_CXX_COMPILER MATCHES ".*clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANGXX 1)
endif()
if( (CMAKE_COMPILER_IS_GNUCXX AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.7) OR
(CMAKE_COMPILER_IS_CLANGXX AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.2))
message(FATAL_ERROR "Your C++ compiler does not support C++11. Please install g++ 4.7 (or greater) or clang 3.2 (or greater)")
else()
message(STATUS "Compiler is recent enough to support C++11.")
endif()
if( CMAKE_COMPILER_IS_GNUCXX )
append_cxx_compiler_flags("-std=c++11 -Wall -Wextra " "GCC" CMAKE_CXX_FLAGS)
append_cxx_compiler_flags("-ffast-math -funroll-loops" "GCC" CMAKE_CXX_FLAGS)
else()
append_cxx_compiler_flags("-std=c++11 -Wall" "CLANG" CMAKE_CXX_FLAGS)
append_cxx_compiler_flags("-stdlib=libc++" "CLANG" CMAKE_CXX_FLAGS)
append_cxx_compiler_flags("-ffast-math -funroll-loops" "CLANG" CMAKE_CXX_FLAGS)
endif()
include(CheckAVX2)
if( BUILTIN_POPCNT )
if( CMAKE_COMPILER_IS_GNUCXX )
append_cxx_compiler_flags("-msse4.2" "GCC" CMAKE_CXX_FLAGS)
else()
append_cxx_compiler_flags("-msse4.2" "CLANG" CMAKE_CXX_FLAGS)
endif()
message(STATUS "CPU does support fast popcnt.")
else()
message(STATUS "CPU does NOT support fast popcnt")
endif()
add_subdirectory(external/googletest)
include_directories(${CMAKE_HOME_DIRECTORY}/include
${CMAKE_HOME_DIRECTORY}/external/googletest/include
)
add_executable(build.x src/build.cpp)
target_link_libraries(build.x pthread divsufsort divsufsort64)
【问题讨论】: