CMake项目构建总结

来源:互联网 发布:修改ex软件图标 编辑:程序博客网 时间:2024/06/01 19:56

前几天给部门同事做Linux测试环境搭建的培训,为了给部门同事开拓眼界,所以将CMake构建工具作为拓展内容加到了培训中,并且一时兴起,将公司的几个项目全部加入了CMake构建内容,在改造过程中,一些过程记录如下。

1、一个简单的CMakeLists.txt文件

PROJECT(PROJECTNAME)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)#Set project root directory.SET(PROJECT_ROOT_DIRECTORY "/home/ubt/cmakepro")#Set source lists. SET(SRC_LIST all.c all.h ...)#Include header files directory.INCLUDE_DIRECTORIES(../../inc inc .) # Include link library pathLINK_DIRECTORIES("${PROJECT_ROOT_DIRECTORY}/lib")#Create exectuable file according source list.ADD_EXECUTABLE(TargetName ${SRC_LIST})#Set link library.TARGET_LINK_LIBRARIES(TargetName cli fastdb sqlite3 config m pthread rt)

2、多级目录的扩展

1)、项目根目录CMakeLists.txt文件内容:

PROJECT(PROJECTNAME)CMAKE_MINIMUM_REQUIRED(VERSION 2.8)SET(PROJECT_ROOT_DIRECTORY "/home/ubnt/cmakepro")MESSAGE(STATUS "Project root directory:" ${PROJECT_ROOT_DIRECTORY})ADD_SUBDIRECTORY(src/moduleA)ADD_SUBDIRECTORY(src/moduleB)ADD_SUBDIRECTORY(src/moduleC/moduleCA)ADD_SUBDIRECTORY(src/moduleC/moduleCB)MESSAGE(STATUS "Project dir :" ${PROJECT_BINARY_DIR})

2)、项目子目录下的CMakeLists.txt内容:

SET(SRC_LIST moduleA.cpp moduleA.h ...INCLUDE_DIRECTORIES(${PROJECT_ROOT_DIRECTORY}/inc ${PROJECT_ROOT_DIRECTORY}/inc/sqlite3 ${PROJECT_ROOT_DIRECTORY}/inc/fastdb${CMAKE_CURRENT_SOURCE_DIR})LINK_DIRECTORIES(${PROJECT_ROOT_DIRECTORY}/lib )SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/program/bin)ADD_EXECUTABLE(mouduleA ${SRC_LIST})TARGET_LINK_LIBRARIES(mouduleA  fastdb sqlite3 rt)

同样的完成B、C模块下的CMakeLists.txt 文件。

3、指定编译器的CMakeLists.txt文件示例

1)、项目目录下CMakeLists.txt的内容:

PROJECT(PROJECTNAME)CMAKE_MINIMUM_REQUIRED(VERSION 2.8)SET(PROJECT_ROOT_DIRECTORY "/home/ubnt/cmakepro")MESSAGE(STATUS "Project root directory:" ${PROJECT_ROOT_DIRECTORY})SET(CMAKE_SYSTEM_NAME Linux)SET(CMAKE_FIND_ROOT_PATH "/home/ubt/toolchain/arm-2008q1/arm-none-linux-gnueabi/libc/lib")SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)SET(CMAKE_C_COMPILER "/home/ubt/toolchain/arm-2008q1/bin/arm-none-linux-gnueabi-gcc")SET(CMAKE_CXX_COMPILER "/home/ubt/toolchain/arm-2008q1/bin/arm-none-linux-gnueabi-g++")ADD_SUBDIRECTORY(src/moduleA)ADD_SUBDIRECTORY(src/moduleB)ADD_SUBDIRECTORY(src/moduleC/moduleCA)ADD_SUBDIRECTORY(src/moduleC/moduleCB)MESSAGE(STATUS "Project dir :" ${PROJECT_BINARY_DIR})

2)、子目录下的CMakeLists.txt :

SET(SRC_LIST moduleA.cpp moduleA.h ...)INCLUDE_DIRECTORIES(${PROJECT_ROOT_DIRECTORY}/inc ${PROJECT_ROOT_DIRECTORY}/inc/sqlite3 ${PROJECT_ROOT_DIRECTORY}/inc/fastdb${CMAKE_CURRENT_SOURCE_DIR})LINK_DIRECTORIES(${PROJECT_ROOT_DIRECTORY}/lib )#Set Executable output pathSET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/program/bin)ADD_EXECUTABLE(mouduleA ${SRC_LIST})TARGET_LINK_LIBRARIES(mouduleA  fastdb sqlite3 rt)
4、加入安装操作的CMakeLists.txt 

INSTALL(FILES ModuleC/xx ....DESTINATION ${PROJECT_BINARY_DIR}/program/etc)INSTALL(FILES ModuleB/xxx ...DESTINATION ${PROJECT_BINARY_DIR}/program/etcPERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTEGROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )INSTALL(DIRECTORY init.d DESTINATION ${PROJECT_BINARY_DIR}/program/etcPATTERN "init.d/*"PATTERN ".svn" EXCLUDEPERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTEGROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机爱思助手下不了东西怎么办 苹果手机在爱思助手刷坏了怎么办 美团外卖摔坏我的奶茶怎么办 米兔定位电话头像突然调换了怎么办 还在气头上时孩子就来撒娇了怎么办 老公把老婆微信屏蔽了老婆该怎么办 魅族手机有质量问题不给退款怎么办 屏幕点不动锁屏密码无法点怎么办 在嘴巴和鼻翼周围长痘该怎么办 小孩嘴巴被蚊虫咬的红肿怎么办 每次洗头都掉好多头发该怎么办 关于宝宝脾不好胃口却很好怎么办 高中生掉发严重怎么办该看什么科 脱头发如何治疗 掉头发厉害怎么办 头发上突然秃了一小块怎么办 全秃过后长出来白色头发怎么办 高三学生喜欢打球影响学习怎么办 高三学生受同学搔挠学习怎么办 烫完头发掉头发很厉害怎么办 烫头发后掉头发很厉害怎么办 十八岁了下门牙活动疼痛怎么办 烫完头发后掉头发很厉害怎么办 16岁的孩孑得了肺炎怎么办 我的头发掉的很厉害怎么办 八个月宝宝头后面没头发怎么办 生完孩子掉头发很厉害怎么办 生完孩子后掉头发很厉害怎么办 头发又细又软又卷怎么办 后颈部没有头发掉光了想植发怎么办 头发掉的厉害怎么办怎么拯救掉头发 头发可以种植吗 如果是秃顶怎么办 染头发把手指甲染黑了怎么办 怀孕两个月下体流褐色分泌物怎么办 头发总是大把大把的得掉 怎么办 严重脱发怎么办去问南宁肤康 脱发严重怎么办去看南宁肤康 前额头发少怎么办 如何使头发增多 生完宝宝头发一把一把的掉怎么办 生完宝宝后头发掉的厉害怎么办 生完宝宝头发掉的厉害怎么办 生了小孩后头发掉很多怎么办