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
变量的作用仅为“在可用时使用它,或返回到编译器可以提供的最接近的标准”。你可以找到详细的评论
here
你的问题更重要的部分在(2)。这个
find_package()
命令查找GSL库等,并将其作为导入目标
GSL::gsl
和
GSL::gslcblas
target_link_libraries()
将可执行文件链接到它们,如图所示。CMake文档解释了
find_包()