cmake常用函数
cmake的常用函数
cmake_minimum_required(VERSION 3.0) #指定cmake的最小版本
project(demo) # 设置项目名称
add_executable(demo demo.cpp) # 生成可执行文件 demo.cpp 可以是一系列文件的集合
add_library(demo STATIC demo.cpp) # 生成静态库 libdemo.a
add_library(demo SHARED demo.cpp) # 生成共享库(动态库) libdemo.so
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic -O2 -Wall -Wno-pointer-to-int-cast\
-Wno-incompatible-pointer-types -Wno-pointer-sign\
-Wno-missing-braces -Wno-format") #指定Gcc的编译参数,如果不怕麻烦,可以在这里显式的指定-I -L的参数
add_library(demo SHARED EXCLUDE_FROM_ALL demo.cpp) # 生成共享库(动态库) libdemo.so 设置EXCLUDE_FROM_ALL参数后,只有显式的执行 make demo才会生成动态库
set(LIBRARY_OUTPUT_PATH, $(PROJECT_SOURCE_DIR}/output) # 指定库文件输出路径
set(cjson_install ${PROJECT_SOURCE_DIR}/3rd_opensrc/cjson_install/${LIB}) # 也可以这样给自己指定的变量赋值
aux_source_directory(${PROJECT_SOURCE_DIR}/src DIR_SRC) #源码的c/c++文件目录
include_directories(${PROJECT_SOURCE_DIR}/include) # 源码的头文件目录
link_directories(${PROJECT_SOURCE_DIR}/lib) # 添加链接库的目录,这里只是添加链接库的目录
add_executable(demo ${DIR_SRC}) # 使用一系列文件生成demo
target_link_libraries(${PROJECT_NAME} ${PROJECT_SOURCE_DIR}/app_hello/libhello.so) # 链接库文件,可以是静态也可以是动态,后面同样可以是一些列的集合,这里如果之前指定了libhello.so的目录,可以直接简化成hello,类似makefile的 -L
if…elseif…else…endif # 逻辑判断和比较:
if (expression):# expression 不为空(0,N,NO,OFF,FALSE,NOTFOUND)时为真
if (not exp):# 与上面相反
if (var1 AND var2)
if (var1 OR var2)
if (COMMAND cmd):# 如果 cmd 确实是命令并可调用为真
if (EXISTS dir) if (EXISTS file):# 如果目录或文件存在为真
if (file1 IS_NEWER_THAN file2):# 当 file1 比 file2 新,或 file1/file2 中有一个不存在时为真,文件名需使用全路径
if (IS_DIRECTORY dir):# 当 dir 是目录时为真
if (DEFINED var):# 如果变量被定义为真
if (var MATCHES regex):# 给定的变量或者字符串能够匹配正则表达式 regex 时为真,此处 var 可以用 var 名,也可以用 ${var}
if (string MATCHES regex)