今天心血来潮,想在服务器上试试写libevent的工程是什么感受,那第一步就是学会怎么用cmake建工程,之前也没接触过cmake,然后一上午,比较懵逼,下午看实验室哥们给的一个教程,然后,慢慢理解CMakeLists.txt怎么写,然后自己在一个多文件多目录的demo基础上,加入shell脚本,实现了现在的简易模板。
先介绍一下模板的功能
1.多目录,同一目录下生成一个静态库
2.可配置target name,denpend lib
3.shell脚本实现附加目录的清理与创建
4.配置完成,./build.sh即可
一、文件目录
二、建立步骤
1.自动创建的目录
bin 可执行文件输出目录
lib 静态库输出目录
inc shell脚本自动搜索src下的头文件,并按相对路径复制到inc
build cmake构建目录
2.根目录
将main.cpp 放在根目录
#include <iostream> #include "test1/test.h"//使用这种相对路径即可,此时头文件已经存在于inc目录 #include "test2/test2.h" using namespace std; int main(){ testPrint("hello world"); fun3("hello"); return 0; }
CMakeLists.txt
#设置工程名称 PROJECT(CMAKEDemo) #自己定制 SET(MY_TARGET demo) SET(MY_LINK test1 test2) #设置CMAKE最小版本 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #设置编译器 SET(CMAKE_CXX_COMPILER "g++") #设置构建类型,及相应的编译选项 SET(CMAKE_BUILD_TYPE "Debug") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") #设置执行文件输出目录 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #设置库输出路径 SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) MESSAGE("++++++++++++++Start Build+++++++++++++++++") #当前目录的文件 AUX_SOURCE_DIRECTORY(. SRC_LIST) #添加子目录 ADD_SUBDIRECTORY(src) #头文件搜索目录 INCLUDE_DIRECTORIES(inc) #链接库搜索路径 LINK_DIRECTORIES(lib) #设置链接库 #SET(EXTRA_LIBS ${EXTRA_LIBS} test1 test2) SET(EXTRA_LIBS ${EXTRA_LIBS} ${MY_LINK}) #生成可执行文件 ADD_EXECUTABLE(${MY_TARGET} ${SRC_LIST}) #执行文件链接属性 TARGET_LINK_LIBRARIES(${MY_TARGET} ${EXTRA_LIBS})
build.sh
#!/bin/bash set -e PROJ_ROOT=$PWD BUILD_ROOT=$PROJ_ROOT echo -e "