1鹰霍、概念
- cmake命令不分大小寫
- 編譯過程
- 編寫 CMake 配置文件 CMakeLists.txt 。
- 執(zhí)行命令 cmake PATH 或者 ccmake PATH 生成 Makefile(ccmake 和 cmake 的區(qū)別在于前者提供了一個交互式的界面)春缕。其中睁枕, PATH 是 CMakeLists.txt 所在的目錄官边。
- 使用 make 命令進行編譯。
cmake PATH
make
2外遇、cmake命令
1注簿、CMKAE最低版本要求
cmake_minimum_required (version 2.8)
2、項目名稱
project(demo1)
3跳仿、指定生成目標
add_executable(demo main.cc)
4诡渴、查找目錄下所有的源文件,并把名稱保存到DIR_SRCS
變量
aux_source_directory(. DIR_SRCS)
5菲语、添加子目錄
add_subdirectory(math)
6妄辩、生成鏈接庫
add_library(MathFunctions ${DIR_LIB_SRS})
7惑灵、添加鏈接庫
target_link_libraries(Demo MathFunctions)
8、添加配置文件
configure_file(
"$PROJECT_SROUCE_DIR/config.h.in"
"$PROJECT_SOURCE_DIR/config.h"
)
9眼耀、自定義編譯選項
option (USE_MYMATH
"Use provided math implementation"
ON
)
if(USE_MYMATH)
include_directories("${PROJECT_SOURCE__DIR}/math")
add_subdirectory(math)
set(EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif(USE_MYMATH)
//config.h.in
#cmakedefine USE_MYMATH
//*.c文件
#ifdef USE_MYMATH
#include "math/MathFunctions.h"
#else
#include <math.h>
#endif
10英支、指定安裝路徑
# 指定 MathFunctions 庫的安裝路徑
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)
install (TARGETS Demo Destination bin)
install(FILES "${PROJECT_BINARY_DIR}/config.h" Destination include)
//默認為/usr/local/ CMAKE_INSTALL_PREFIX
11、添加測試
//啟動測試
enable_testing()
add_test(test_name demo param1 param2)
set_tests_properties(test_5_2 PROPERTIES PASS_REGULAR_EXPEESSION "is 10000")
12哮伟、定義測試宏
macro(do_test arg1 arg2 result)
add_test(test_${arg1}_${arg2} Demo arg1 arg2)
set_test_properties(test_${arg1}_${arg2} PROPERTIES_PASS_REGULAR_EXPRESSION ${result})
endmacro(do_test)
13干花、支持GDB
set(CMAKE_BUILD_TYPE "debug")
set(CMKAE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -o0 -wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -o3 -wall")
14、添加環(huán)境檢查
# 檢查系統(tǒng)是否支持 pow 函數(shù)
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
check_function_exists (pow HAVE_POW)
#cmakedefine HAVE_POW
#ifdef HAVE_POW
printf("Now we use the standard library. \n");
double result = pow(base, exponent);
#else
printf("Now we use our own Math library. \n");
double result = power(base, exponent);
#endif
15澈吨、添加版本號
set (Demo_VERSION_MAJOR 1)
set (Demo_VERSION_MINOR 0)
// the configured options and settings for Tutorial
#define Demo_VERSION_MAJOR @Demo_VERSION_MAJOR@
#define Demo_VERSION_MINOR @Demo_VERSION_MINOR@
#include "config.h"
printf("%s Version %d.%d\n",
argv[0],
Demo_VERSION_MAJOR,
Demo_VERSION_MINOR);
16把敢、生成安裝包
//默認前綴:
CMAKE_INSTALL_PREFIX
install([FILES|TARGETS] ${INSTALL_HEAD_FILES} DESTINATION ${INCLUDE_OUTPUT_PATH})
17、參數(shù)傳遞
//以傳遞git信息為例
execute_process(
COMMAND git log -1 --pretty=format:%H
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
WORKING_DIRECTORY
${CMAKE_CURRENT_SOURCE_DIR}
)
string (REGEX REPLACE "[\n\t\r]" "" GIT_VERSION ${GIT_VERSION})
add_definitions( -DGIT_VERSION=\"${GIT_VERSION}\")