CMake基础篇---构建可执行文件
来源:互联网 发布:股票短线王软件 编辑:程序博客网 时间:2024/06/05 19:03
简介
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程,本文从一个ttcp小项目来介绍linux环境下使用camke构建实例。
目录结构
├── bin├── make.sh└── ttcp ├── cmake_install.cmake ├── CMakeLists.txt ├── common.cc ├── common.h ├── cscope.files ├── cscope.out ├── main.cc ├── Makefile ├── make.sh ├── mytime.h ├── tags ├── Timestamp.cc ├── Timestamp.h ├── ttcp_blocking.cc └── ttcp.cc项目使用boost::program_options动态库,存放于/usr/lib/local
基础语法
CMakeLists.txt 文件
cmake_minimum_required (VERSION 2.6) #运行最低版本project(ttcp) 目标文件名#寻找当前目录下所有目标文件FILE(GLOB_RECURSE CPP_LISTS "*.cpp")FILE(GLOB_RECURSE C_LISTS "*.c")FILE(GLOB_RECURSE CC_LISTS "*.cc")FILE(GLOB_RECURSE CXX_LISTS "*.cxx")FILE(GLOB_RECURSE OTHER_LISTS " *.inl")#外部构建#动态库存放于./lib下SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib CACHE PATH "Single directory for all static libraries.")SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib CACHE PATH "Single directory for all dynamic libraries.")#可运行文件存放于../binSET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../bin CACHE PATH "Single directory for all executable.")#设SRC_FILES为目标文件SET(SRC_FILES ${CPP_LISTS} ${C_LISTS} ${CC_LISTS} ${CXX_LISTS} ${OTHER_LISTS})#设置动态库链接目录FIND_LIBRARY(/usr/local/lib /usr/lib64 /lib61 NO_DEFAULT_PATH)#设置编译选项SET(CXX_FLAGS -g -Wall -fPIC)ADD_DEFINITIONS(${CXX_FLAGS} -std=c++0x)#动态库链接目录LINK_DIRECTORIES(/usr/local/lib /usr/lib64)#指定目标文件ADD_EXECUTABLE(ttcp ${SRC_FILES})#链接set(LINK_LIBRARIES boost_program_options)TARGET_LINK_LIBRARIES(ttcp ${LINK_LIBRARIES})
注意:编译模块必须放链接模块前,由于查找的是当前目录所有.cpp 文件,因此可能混入cmake部分代码,推荐使用外部构建,这里提供一个脚本。
外部构建脚本
#! /bin/bashcurpath=`pwd`buildpath=$curpath/buildif [[ ! -x "$buildpath" ]]; then mkdir "$buildpath"fiif [[ -z "$1" ]]; then cd $buildpath cmake ../ttcp makeelif [[ $1 == clean && -z "$2" ]]; then echo "rm build/ lib/ bin/ ..." rm -rf $buildpath/* rm -rf $curpath/lib/* rm -rf $curpath/bin/*elif [[ $2 == bin ]]; then echo "rm bin/ ..." rm -rf $curpath/bin/*elif [[ $2 == lib ]]; then echo "rm lib/ ..." rm -rf $curpath/lib/*elif [[ $2 == build ]]; then echo "rm build/ ..." rm -rf $buildpath/*fimv $curpath/bin/ttcp $curpath
执行make.sh 即可构建完成。
阅读全文
1 0
- CMake基础篇---构建可执行文件
- android studio cMake脚本添加ndk,构建C/C++程序(基础使用篇
- Cmake 基础
- CMake 基础
- CMake 基础
- cmake基础
- CMake项目构建总结
- 使用cmake构建工程
- 使用cmake构建项目
- cmake构建qt工程
- linux Cmake构建工具
- CMAKE自动构建
- Cmake 构建程序
- CMake构建OpenGL项目
- CMake构建CUDA项目
- CMake构建PCL项目
- CMake构建NDK
- 通过CMake构建项目
- 并发编程修九:并发容器之CopyOnWriteArrayList
- Linux用户登录记录日志和相关查看命令汇总
- Spring框架之基础类—AttributeAccessorSupport抽象类
- 开发框架-Spring-错误或异常时返回统一的json格式
- HTML中的密码框
- CMake基础篇---构建可执行文件
- 如何不用iframe和ajax来重复加载页面
- 《阿里巴巴Java开发规约》插件Eclipse版使用指南
- 集群之 -- rabbitmq
- python爬取 热门小说
- ROS中launch file基本介绍
- JVM调优之jstack找出最耗cpu的线程并定位代码
- 数据库中不支持中文,将默认的gbk格式调整成utf-8格式
- java千万级数据txt文件导入数据库