1、宏功能
PROJECT_SOURCE_DIR
使用cmake命令后紧跟的目录,一般是工程的根目录
PROJECT_BINARY_DIR
执行cmake命令的目录
CMAKE_CURRENT_SOURCE_DIR
当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR target
编译目录
EXECUTABLE_OUTPUT_PATH
重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH
重新定义目标链接库文件的存放位置
PROJECT_NAME
返回通过PROJECT指令定义的项目名称
CMAKE_BINARY_DIR
项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径
2、常用命令
CMake 使用 # 进行行注释,可以放在任何位置。
CMake 使用 #[[ ]] 形式进行块注释。
指定使用的 cmake 的最低版本
cmake_minimum_required
定义工程会生成一个可执行程序
add_executable(可执行程序名 源文件名称)
指定使用的C++标准
set(CMAKE_CXX_STANDARD 11)
定义变量
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
set(SRC_LIST add.c div.c main.c mult.c sub.c)
set(SRC_LIST add.c;div.c;main.c;mult.c;sub.c)
add_executable(app ${SRC_LIST})
指定输出的路径
set(HOME /home/robin/Linux/Sort)
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
查找某个路径下的所有源文件
aux_source_directory(< dir > < variable >)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
add_executable(app ${SRC_LIST})
file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
包含头文件
include_directories(headpath)
include_directories(${PROJECT_SOURCE_DIR}/include)
制作静态库
add_library(库名称 STATIC 源文件1 [源文件2] ...)
制作动态库
add_library(库名称 SHARED 源文件1 [源文件2] ...)
指定静态库和动态库输出的路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
包含静态库文件
link_libraries(<static lib> [<static lib>...])
link_directories(<lib path>)
link_directories(${PROJECT_SOURCE_DIR}/lib)
link_libraries(calc)
包含动态库文件
target_link_libraries(A B C)
target_link_libraries(D A)
target_link_libraries(app pthread)
宏定义
add_definitions(-D宏名称)
3、案例
3.1单个源文件
/
* power - Calculate the power of number.
* @param base: Base value.
* @param exponent: Exponent value.
*
* @return base raised to the power exponent.
*/
double power(double base, int exponent)
{
int result = base;
int i;
if (exponent == 0) {
return 1;
}
for(i = 1; i < exponent; ++i){
result = result * base;
}
return result;
}
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = power(base, exponent);
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
第二步:编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo1)
# 指定生成目标
main.cc)
注意:
- cmake .. 表示在上一级目录中查找 CMakeLists.txt 文件。
- cmake . 表示在当前目录中查找 CMakeLists.txt 文件。
第一步:编写源代码,demo2文件夹下有三个文件,main.c/MathFunctions.c/MathFunctions.h
第二步:编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo2)
# 指定生成目标
main.cc MathFunctions.cc)
查找指定目录下的所有源文件
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo2)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
第三步:在当前目录执行 cmake . ,
第一步:编写源代码,demo3文件夹下有一个文件main.c和一个文件夹math,math文件夹下有两个文件MathFunctions.c/MathFunctions.h
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo3)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
main.cc)
# 添加链接库
MathFunctions)

想了解更多
赶紧扫码关注
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/do-yfwjc/71932.html