cmake编译工程列子

来源:互联网 发布:枯叶龟多少钱一只淘宝 编辑:程序博客网 时间:2024/05/21 10:26
理解: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路径
ADD_SUBDIRECTORY(src)

(1)的文件内容
PROJECT(PaymentService)

#收集目录中的文件名并赋值给变量 
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)
0 0
原创粉丝点击