总述:
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake 。
从入门的角度,进行最基础的cmake学习和整理
学习
示例
# ## 整体编译
# cmake_minimum_required(VERSION 2.8.0)
# project(hhhhh)
# set( CMAKE_BUILD_TYPE "Debug")
# include_directories(include)
# #AUX_SOURCE_DIRECTORY(src DIR_SRCS)
# # add_executable(main ${DIR_SRCS})
# add_executable(main src/main.cpp src/testmath.cpp)
# #TARGET_LINK_LIBRARIES(main m)
## 先编译库文件,再编译
cmake_minimum_required(VERSION 2.8.0)
project(cmaketest)
set( CMAKE_BUILD_TYPE "Debug")
include_directories(include)
add_library(testmath src/testmath.cpp)
add_executable(main src/main.cpp)
target_link_libraries(main testmath)
# cool bingo
tips:
1、link_directories 添加链接库的相对路径和绝对路径问题
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/vlfeat/lib)
CMake 2.8.0 以下的版本,加载动态链接库link_directories()时使用相对路径,链接时也使用相对路径;
CMake 2.8.1 及以上版本加载动态链接库link_directories()时使CMAKE_CURRENT_SOURCE_DIR修饰对路径,链接时先转换成绝对路径再进行链接。
可能的报错:
Policy CMP0015 is not set: link_directories() treats paths relative to the source dir.
2、变量的设置set()
#设置变量
set(var "a")
#引用变量${var}
message(${var})
#if 中的引用不用加${}
if var
实例:
set(vlfeat_DIR "/home/tonglu/pkg/vlfeat/vlfeat-0.9.21-bin/vlfeat-0.9.21/")#bash: $VLROOT
#message(${vlfeat_DIR})
参考:
非常好:https://blog.csdn.net/u014162133/article/details/104039573