理解:cmake是一个跨平台编译器工具,它可以生成各种编译文件。本文主要是将如何通过cmake来编译c++工程。它采取out-of-source(即中间产物与源码分离)方式。在c++中,可以认为cmake是将所有源文件.h和.cpp都放在同一个目录下,来进行编译和链接,最终生成工程。
1、工程目录结构
payment
|-----bin //生成可执行程序文件夹
|-----var //存放日志文件夹
|-----build //构建工程文件夹
|-----etc //配置文件夹
|-----include
//源码.h文件夹
|-----business
|-----common
|-----src //源码.cpp文件夹
|-----business
|-----common
|------CMakeLists.txt (1)
|------CMakeLists.txt (2)
(2)的文件内容为:
#工程名字
PROJECT(PaymentService)
#cmkae最低版本,低于2.6会停止构建
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
#指定编译器和编译方式
SET(CMAKE_CXX_FLAGS "-g -std=c++11 -lpthread")
#加载.h文件,PROJECT_SOURCE_DIR为cmake自定义变量,表示工程编译的根目录
INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/business
${PROJECT_SOURCE_DIR}/include/common
#下面为使用第三方库需要引进的.h文件
/usr/include/pay
/usr/include/pay/wpaybl
/usr/include/pay/busiframe
/usr/include/pay/newdbdal/include
/usr/include/pay/dbdal/oracle
/usr/include/pay/route)
#表示要使用的库文件路径
LINK_DIRECTORIES(/usr/libpay)
#设置输出工程的路径
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#添加子CMakeLists.txt路径
PROJECT(PaymentService)
#cmkae最低版本,低于2.6会停止构建
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
#指定编译器和编译方式
SET(CMAKE_CXX_FLAGS "-g -std=c++11 -lpthread")
#加载.h文件,PROJECT_SOURCE_DIR为cmake自定义变量,表示工程编译的根目录
INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/business
${PROJECT_SOURCE_DIR}/include/common
#下面为使用第三方库需要引进的.h文件
/usr/include/pay
/usr/include/pay/wpaybl
/usr/include/pay/busiframe
/usr/include/pay/newdbdal/include
/usr/include/pay/dbdal/oracle
/usr/include/pay/route)
#表示要使用的库文件路径
LINK_DIRECTORIES(/usr/libpay)
#设置输出工程的路径
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#添加子CMakeLists.txt路径
ADD_SUBDIRECTORY(src)
(1)的文件内容
PROJECT(PaymentService)
AUX_SOURCE_DIRECTORY(./business SRC_BUSINESS_LIST)
AUX_SOURCE_DIRECTORY(./common SRC_COMMON_LIST)
LIST(APPEND SRC_LIST ${SRC_COMMON_LIST})
#将列表加入可执行目标的编译
ADD_EXECUTABLE(PaymentServer ${SRC_LIST})
INSTALL(TARGETS PaymentServer RUNTIME DESTINATION ${INSTALL_DIR}/bin)
#
收集目录中的文件名并赋值给变量
AUX_SOURCE_DIRECTORY(. SRC_LIST)
AUX_SOURCE_DIRECTORY(./business SRC_BUSINESS_LIST)
AUX_SOURCE_DIRECTORY(./common SRC_COMMON_LIST)
#文件列表操作
LIST(APPEND SRC_LIST ${SRC_BUSINESS_LIST})
LIST(APPEND SRC_LIST ${SRC_COMMON_LIST})
#将列表加入可执行目标的编译
ADD_EXECUTABLE(PaymentServer ${SRC_LIST})
#设置单个可执行目标所需要连接的库
TARGET_LINK_LIBRARIES(PaymentServer libACE.so libjson_linux-gcc-4.1.2_libmt.so libprotobuf.so libcurl.so libmemcached.so libmemcachedutil.so libclntsh.so libnewdal.so liblog4cpp.so libbusiframe.a libwpaybl.a liblog4cplus.a libcpproute.a)
#cmake -DCMAKE_INSTALL_PREFIX=~ ..
#设置构建的路径,控制make install是文件会安装到什么地方,默认是/usr/local
SET(INSTALL_DIR "PaymentService/Business")
INSTALL(TARGETS PaymentServer RUNTIME DESTINATION ${INSTALL_DIR}/bin)