CMake 自定義編譯選項

自定義編譯選項

CMake 容許爲項目增長編譯選項,從而能夠根據用戶的環境和需求選擇最合適的編譯方案html

例如,能夠將 MathFunctions 庫設爲一個可選庫,若是該選項爲 ON ,就使用該庫定義的數學函數來進行運算。不然就調用標準庫中的數學函數庫。ide

修改 CMakeLists 文件

咱們要作的第一步是在頂層的 CMakeLists.txt 文件中添加該選項:函數

# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)
# 項目信息
project (Demo4)
# 加入一個配置頭文件,用於處理 CMake 對源碼的設置
configure_file (
  "${PROJECT_SOURCE_DIR}/config.h.in"
  "${PROJECT_BINARY_DIR}/config.h"
  )
# 是否使用本身的 MathFunctions 庫
option (USE_MYMATH
       "Use provided math implementation" ON)
# 是否加入 MathFunctions 庫
if (USE_MYMATH)
  include_directories ("${PROJECT_SOURCE_DIR}/math")
  add_subdirectory (math)  
  set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
# 查找當前目錄下的全部源文件
# 並將名稱保存到 DIR_SRCS 變量
aux_source_directory(. DIR_SRCS)
# 指定生成目標
add_executable(Demo ${DIR_SRCS})
# 添加連接庫
target_link_libraries (Demo  ${EXTRA_LIBS})

 

其中:ui

  1. configure_file 命令用於加入一個配置頭文件 config.h ,這個文件由 CMake 從 config.h.in 生成,經過這樣的機制,將能夠經過預約義一些參數和變量來控制代碼的生成。
  2. option 命令添加了一個 USE_MYMATH 選項,而且默認值爲 ON
  3. USE_MYMATH 變量的值決定是否使用咱們本身編寫的 MathFunctions 庫。

 

修改 main.cc 文件

以後修改 main.cc 文件,讓其根據 USE_MYMATH 的預約義值來決定是否調用標準庫仍是 MathFunctions 庫:spa

#include 
#include 
#include 
"config.h"
#ifdef USE_MYMATH
  #include "math/MathFunctions.h"
#else
  #include 
#endif
int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s base exponent \n", argv[0]);
        return 1;
    }
    double base = atof(argv[1]);// Convert string to float
    int exponent = atoi(argv[2]); // Convert string to integer
    
#ifdef USE_MYMATH
    printf("Now we use our own Math library. \n");
    double result = power(base, exponent);
#else
    printf("Now we use the standard library. \n");
    double result = pow(base, exponent);
#endif
    printf("%g ^ %d is %g\n", base, exponent, result);
    return 0;
}

 

編寫 config.h.in 文件

上面的程序值得注意的是,這裏引用了一個 config.h 文件,這個文件預約義了 USE_MYMATH 的值。但咱們並不直接編寫這個文件,爲了方便從 CMakeLists.txt 中導入配置,咱們編寫一個 config.h.in 文件,內容以下:code

#cmakedefine USE_MYMATH

這樣 CMake 會自動根據 CMakeLists 配置文件中的設置自動生成 config.h 文件。htm

參考文檔http://www.cmake.org/cmake-tutorial/blog

這裏有更加完整的中文版,感謝大神!!:文檔

http://www.cnblogs.com/coderfenghc/archive/2013/01/20/2846621.html#3176055get

相關文章
相關標籤/搜索