CMake笔记
CMake
它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件
linux平台使用cmake流程
- 编写 CMake 配置文件 CMakeLists.txt 。
- 执行命令 cmake CMakeListPath 生成 Makefile
- 使用 make 命令进行编译。make使用
编写CMakeList.txt文件
基本版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| cmake_minimum_required (VERSION 2.8)
project (project_name)
add_executable(target_name main.c)
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})
|
添加源文件目录
1 2 3 4
| aux_source_directory(srcPath DIR_SRCS)
add_executable(target_name ${DIR_SRCS})
|
添加头文件目录
1 2
| include_directories(includeFilePath)
|
添加子目录
子目录中也有有一个CMakeList.txt,子目录下生成一个链接库
1 2 3 4 5
| aux_source_directory(srcPath DIR_SRCS)
add_library(library_name ${DIR_SRCS})
|
在主函数中添加链接库
1 2 3
| add_excutable(target_name ${SRCS})
target_link_library(target_name ${library_name})
|
添加链接库
1 2
| link_libraries(library_name1 library_name2)
|
1 2
| link_directories(DLLPath)
|
1 2
| target_link_libraries(target_name ${BOOST_LIBRARIES})
|
1 2 3
|
find_library(MY_LIB library_name1 libraryPath)
|
其它
text1 2
| # 设置编译参数 add_definitions("-Wall -g")
|
text1 2
| # 添加编译依赖 add_dependencies()
|
text1 2 3 4 5 6 7
| # 设置目标属性 set_target_properties() # eg: set_target_properties(${project_name} PROPERTIES SOVERSION 0.0.1 PUBLIC_HEADER "include/gtstack.h;include/gttypes.h" )
|
text1 2 3 4 5 6 7
| # 设置版本号 set(VERSION_MAJOR 1) # 最大的版本编号 set(VERSION_MINOR 0) # 其次于major的版本号 set(VERSION_PATCH 0) # 其次于minor的版本号 set(VERSION_TWEAK 0) # 其次于patch的版本号
# 版本号:MAJOR.MINOR.PATCH.TWEAK (semver语义化版本号的规则)
|
text1 2
| # 输出信息 message([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”)
|
逻辑语法
text1 2
| LESS,GREATER,EQUAL # 数字比较 STRLESS、STRGREATER、STREQUAL # 字符串比较
|
text1 2 3 4 5 6 7
| if(CONDITION1) ... elseif(CONDITION2) ... else(CONDITION3) ... endif
|
text1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 1 foreach(loop_var arg1 arg2...) ... endforeach(loop_var)
# 2 foreach(loop_var RANGE total) ... endforeach(loop_var) # 3 foreach(loop_var RANGE start stop [step]) ... endforeach(loop_var) # 4 foreach(loop_var IN [LISTS [list1 [...]]] [ITEMS [item1 [...]]]) ... endforeach(loop_var)
|
text1 2 3
| while(CONDITION) ... endwhile(CONDITION)
|
text1 2 3 4
| # Logic operation if(FALSE AND (FALSE OR TRUE)) ... endif()
|
原文链接: https://www.delta1037.cn/2017/C_C++/CMake笔记/
版权声明: 转载请注明出处.