cmake关于CMakeList.txt简单案例

PROJECT(a.out)                                            # 设置工程名 
cmake_minimum_required(VERSION 2.8)                       # 指定最低版本需求 cmake最低版本
SET(CMAKE_CXX_COMPILER "g++")                             # 设置g++编译器
SET(CMAKE_BUILD_TYPE Debug)                               # 设置编译类型debug
if(CMAKE_BUILD_TYPE MATCHES "Debug")                      # 根据类型设置编译选项
    MESSAGE("-- Build Debug")
    SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O0  -Wall -g")
    SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -Wall -g")
else(CMAKE_BUILD_TYPE MATCHES "Release")
    MESSAGE("-- Build Release")
    SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O0  -Wall")
    SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -Wall")
endif()

add_definitions(-Wno-unused-local-typedefs 
        -Wno-unused-value 
        -Wno-unused-but-set-variable 
        -Wno-unused-variable 
        -Wno-unused-function 
        )                                                 # 忽略未使用警告

execute_process(COMMAND rm -fr 
${CMAKE_SOURCE_DIR}/build/*)                              # 执行shell命令
set(ENV{LD_LIBRARY_PATH} "$ENV{ORACLE_HOME}/lib")         # 设置oracle动态库环境
execute_process(COMMAND proc 
include=${CMAKE_SOURCE_DIR}/include 
code=cpp cpp_suffix=cpp 
${CMAKE_SOURCE_DIR}/src/oracle_handle.pc)                 # 执行shell命令将pc文件生成cpp
  
###CMAKE_SOURCE_DIR为CMakeLists.txt同级目录
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)          # 指定头文件目录
AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/src SOURCE_LIST) # 遍历src下所有源文件并保存在SOURCE_LIST变量中
###也可以使用以下方式逐个设置源文件
###set(SRC_LIST ${CMAKE_SOURCE_DIR}/src/main.cpp
###    ${CMAKE_SOURCE_DIR}/src/1.cpp
###    ${CMAKE_SOURCE_DIR}/src/2.cpp)
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/lib
    $ENV{ORACLE_HOME}/lib)                                # 添加库目录,类似于'-L'

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)     # 重定义生成路径
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_LIST})            # 编译
TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread clntsh)     # 链接 类似于'-l'



###Cmake的文件复制功能
FILE(COPY config.txt libcustom.so DESTINATION ${PROJECT_BINARY_DIR}/bin)   

###编译子模块,相对路径,child_module目录下也拥有一个CMakeLists.txt,CMAKE_SOURCE_DIR与根相同
ADD_SUBDIRECTORY(child_module)                            


在CMakeLists.txt同级目录建立include、src、lib、build四个目录,添加好各自文件后,在build下执行cmake ..,生成目标程序位于build/bin/目录下。 (此案例包含oracle的pro*c生成步骤)

适配windows平台示例:

IF(${WIN32}) # windows参数 (boost1.53只有mt-s静态运行库非调试版本,故默认使用release编译)-------------------------------------
add_definitions("/DWIN32_LEAN_AND_MEAN")
set(CMAKE_BUILD_TYPE "Release")
SET(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
	MESSAGE("-- Build Debug")
	SET(CMAKE_CXX_FLAGS_DEBUG  "/MTd")
ELSE()
	MESSAGE("-- Build Release")
	SET(CMAKE_CXX_FLAGS_RELEASE  "/MT")
ENDIF()
ELSE(${WIN32}) # linux参数-----------------------------------------
SET(CMAKE_CXX_COMPILER "g++")                             					# 设置GCC编译器
SET(CMAKE_BUILD_TYPE Debug)                               					# 设置编译类型debug
if(CMAKE_BUILD_TYPE MATCHES "Debug")
	MESSAGE("-- Build Debug")
	sET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -std=c++98 -O0  -Wall -g -D CLOUDSURE_USE_PROTOBUF")
	SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -Wall -g -D CLOUDSURE_USE_PROTOBUF")
else(CMAKE_BUILD_TYPE MATCHES "Release")
	MESSAGE("-- Build Release")
	SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -std=c++98 -O0  -Wall -D CLOUDSURE_USE_PROTOBUF")
	SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -Wall -D CLOUDSURE_USE_PROTOBUF")
endif()
add_definitions(-Wno-unused-local-typedefs 
		-Wno-unused-value 
		-Wno-unused-but-set-variable 
		-Wno-unused-variable 
        -Wno-unused-function 
		-Wno-deprecated-declarations
		)																# 忽略未使用警告
ENDIF(${WIN32}) # 参数end-------------------------------------

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值