Cmake
cmake_minimum_required(VERSION 3.0)
project(test)
set(EXECUTABLE_OUTPUT_PATH /home/kunsir/aa/bb/cc) # 设置文件输出路径
add_executable(app add.c div.c)
PROJECT_SOURCE_DIR
CMakeList.txt
所在位置
CMAKE_CURRENT_SOURCE_DIR
CMakeList.txt
所在位置
指定头文件所在目录
include_directories(${PROJECT_SOURCE_DIR}/include)
制作静态库
add_library(库名称 STATIC/SHARED 源文件1 源文件2 ...)
# STATIC 静态库
# SHARED 动态库
例:
add_library(calc SHARED $(SRC))
指定生成库文件路径
set(LIBRARY_OUTPUT /home/kunsir/abcdefg)
# 若路径不存在,自动创建
set(a a b) # 链接两个变量
Linux中,静态库名字分为三部分,lib
+库名称
+.a
动态库 lib
+库名称
+.so
windows中,静态库名字 lib
+库名称
+.lib
windows中,动态库名字 lib
+库名称
+.dll
link_libraries() 链接静态库
target_link_libraries() 链接动态库
搜索文件
方式一:aux_source_directory
aux_source_directory(<dir>, variable)
dir 搜索的路径,variable 搜索得到的源文件存到这个变量中。然后
add_executable(${variable})
方式二:file
file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
GLOB
:将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
GLOB_RECURSE
:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。
例:
file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB NAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
链接静态库 link_libraries
link_libraries(<static lib> [<static lib>...])
参数一:指定要链接的静态库名字
可以是全名 libxxx.a
也可以是掐头(lib
)去尾(.a)之后的名字xxx
参数2-N:要链接的其它静态库的名字
如果该静态库不是系统提供的(自己制作或者使用第三方提供的静态库)可能出现静态库找不到的情况,此时要把静态库的路径指定出来:
link_directories(<lib path>)
CMAKE判断文件夹存不存在
set(folder_path "/path/to/folder")
if (EXISTS ${folder_path}) # 判断不存在,在EXISTS前边加NOT
message("Folder exists: ${folder_path}")
else ()
message("Folder does not exist: ${folder_path}")
endif ()