CMake笔记
-
CMake
它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件
linux平台使用cmake流程
- 编写 CMake 配置文件 CMakeLists.txt 。
- 执行命令 cmake CMakeListPath 生成 Makefile
- 使用 make 命令进行编译。make使用
编写CMakeList.txt文件
基本版
#CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8) #项目信息 project (project_name) #指定生成目标 add_executable(target_name main.c)
#CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8) #项目信息 project (project_name) # 使用变量 set(SOURCE_FILES file1.c file2.c main.c) set(SOURCE_FILES file1.c file2.c main.c [apend ...]) # 追加方式添加 #指定生成目标 add_executable(target_name
${SOURCE_FILES}) 添加源文件目录
# 添加源文件目录 aux_source_directory(srcPath DIR_SRCS) # 指定生成目标 add_executable(target_name ${DIR_SRCS})
添加头文件目录
# 包含头文件目录 include_directories(includeFilePath)
添加子目录
子目录中也有有一个CMakeList.txt,子目录下生成一个链接库
# 查找当前目录源文件,将名称 aux_source_directory(srcPath DIR_SRCS) # 生成链接库 add_library(library_name
${DIR_SRCS}) 在主函数中添加链接库
add_excutable(target_name ${SRCS}) # 在指定生成目标之后添加链接库 target_link_library(target_name
${library_name}) 添加链接库
link_libraries(library_name1 library_name2) # 所有编译目标都链接的库
link_directories(DLLPath) # 指定动态链接库的搜索路径
target_link_libraries(target_name ${BOOST_LIBRARIES}) # 添加链接库
# 在指定目录中搜索一个库,并且包含在变量中 find_library(MY_LIB library_name1 libraryPath) # 查找并添加动态库(添加一部分)
其它
设置编译参数
add_definitions("-Wall -g")
添加编译依赖
add_dependencies()
设置目标属性
set_target_properties() # eg: set_target_properties(${project_name} PROPERTIES SOVERSION 0.0.1 PUBLIC_HEADER "include/gtstack.h;include/gttypes.h" )
设置版本号
set(VERSION_MAJOR 1) # 最大的版本编号 set(VERSION_MINOR 0) # 其次于major的版本号 set(VERSION_PATCH 0) # 其次于minor的版本号 set(VERSION_TWEAK 0) # 其次于patch的版本号 # 版本号:MAJOR.MINOR.PATCH.TWEAK (semver语义化版本号的规则)
输出信息
message([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”)
语法
LESS,GREATER,EQUAL # 数字比较 STRLESS、STRGREATER、STREQUAL # 字符串比较
# 条件判断 if(CONDITION1) ... elseif(CONDITION2) ... else(CONDITION3) ... endif
# 1 循环实现1 foreach(loop_var arg1 arg2...) ... endforeach(loop_var) # 2 循环实现2 foreach(loop_var RANGE total) ... endforeach(loop_var) # 3 循环实现3 foreach(loop_var RANGE start stop [step]) ... endforeach(loop_var) # 4 循环实现4 foreach(loop_var IN [LISTS [list1 [...]]] [ITEMS [item1 [...]]]) ... endforeach(loop_var)
# while循环实现 while(CONDITION) ... endwhile(CONDITION)
# Logic operation if(FALSE AND (FALSE OR TRUE)) ... endif()
-
mark一下
-
学到了!!
-
可以的 mark一哈
-
优秀泊哥,学习了
-
可以可以,再加个实例就更好了!
-
大佬们说笑了
-
超棒,对最近的操作系统课设很有帮助
-
@zhangxin 操作系统用的是makefile。。cmake的执行的文件是cmakelists.txt
-
收藏了,泊哥厉害
-
干脆把操作系统课设来个一条龙教程
-
收藏一下♬