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-------------------------------------