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
- CMake项目构建总结
- 使用cmake构建项目
- CMake构建OpenGL项目
- CMake构建CUDA项目
- CMake构建PCL项目
- 通过CMake构建项目
- 用CMake 构建Qt 项目
- 用CMake 构建Qt 项目
- 用CMake 构建Qt 项目
- 用CMake 构建Qt 项目
- 用CMake 构建Qt 项目
- 用CMake构建Qt5项目
- 使用CMake构建项目的简明示例
- 使用CMake构建项目的简明示例
- 用CMake 构建Qt 项目 (译)
- C实战:项目构建Make,Automake,CMake
- C实战:项目构建Make,Automake,CMake
- 使用Eclipse和CMake构建项目
- PHP抽象类构造
- jquery.datatable.js库使用
- Hibernate知识点积累!!
- VS2010 与 VS2013库的问题
- Java SE之旅_09_代理Proxy
- CMake项目构建总结
- sql sever 索引
- windows server 2008 AD中如何禁用USB端口
- YII 安全
- VC读取文件的文件版本号
- Linux增加外置硬件看门狗方案
- 迩 一直在硪身旁从未走远
- AnyChat,跨平台的音视频解决方案
- uploadify上传