1. 程式人生 > >CMake 使用方法 & CMakeList.txt

CMake 使用方法 & CMakeList.txt


    CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的C++特性,類似UNIX下的automake。

CMake 使用方法

CMake的所有的語句都寫在一個叫:CMakeLists.txt的檔案中。當CMakeLists.txt檔案確定後,可以用ccmake命令對相關 的變數值進行配置。這個命令必須指向CMakeLists.txt所在的目錄。配置完成之後,應用cmake命令生成相應的makefile(在Unix like系統下)或者 project檔案(指定用window下的相應程式設計工具編譯時)。

    其基本操作流程為:

$> ccmake directory
$> cmake directory
$> make

其中directory為CMakeList.txt所在目錄;
  • 第一條語句用於配置編譯選項,如VTK_DIR目錄 ,一般這一步不需要配置,直接執行第二條語句即可,但當出現錯誤時,這裡就需要認為配置了,這一步才真正派上用場;
  • 第二條命令用於根據CMakeLists.txt生成Makefile檔案;
  • 第三條命令用於執行Makefile檔案,編譯程式,生成可執行檔案;

CMake的執行就是這麼簡單,其難點在於如何編寫CMakeLists.txt檔案,下面結合例子簡單介紹CMakeLists.txt的編寫,看下面這個CMakeLists.txt

#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#set extern libraries
SET(LIBRARIES
libm.so
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
 

或者用下面這個CMakeLists.txt
#project name
PROJECT(test_math)
#head file path
INCLUDE_DIRECTORIES(
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#set environment variable
SET(TEST_MATH
${DIR_SRCS}
)
#add executable file
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library
TARGET_LINK_LIBRARIES(../bin/bin m)

這是一個測試數學函式的程式的CMakeLists.txt,"#"後面為註釋的內容,CMake的命令全部為大寫

第2行指定生成的工程名為test_math

第4行指定標頭檔案目錄為include

第8行指定原始檔目錄為src,並將其賦值給環境變數DIR_SRCS

第10行設定環境變數TEST_MATH的值為環境變數DIR_SRCS的值,此處用於顯示如何用環境變數對環境變數進行賦值

第14行將數學函式庫賦值給環境變數LIBRARIES,當然,可以不用這個環境變數,而在後面直接使用該庫名

第18行用於指定生成檔案,將環境變數TEST_MATH目錄下的所有檔案編譯生成../bin目錄下的可執行檔案bin

第20行指定../bin/bin執行時的連結庫為環境變數LIBRARIES的值-libm.so

下面給出原始檔
/src/main.c:

#include<stdio.h>
#include"../include/a.h"
int main()
{
    double b=25.0;
    double a=0.0;
    a=get_sqrt(b);
 
    printf("a is %lf, b is %lf\n",a,b);
    return 0;
}

/src/a.c

#include"../include/a.h"
double get_sqrt(double var1)
{
    return sqrt(var1);
}

/include/a.h

#ifndef  A_FILE_HEADER_INC
#define  A_FILE_HEADER_INC
#include<math.h>
 
double get_sqrt(double var1);
 
#endif 

將CMakeLists.txt放在當前目錄下,執行CMakeLists.txt

$> cmake .
$> make

即可生成可執行檔案,在目錄/bin下的bin檔案,好了執行看其效果是否和所想一樣。

相關推薦

CMake 使用方法 & CMakeList.txt

    CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的C++特性,類似UNIX下的automake。 CMake 使用方法 CMake的所有的語句都寫在一個叫:CMakeList

ROS初級教程 cmake cmakelist.txt 的編寫教程

函數 geo ets other cas 描述 targe util rom 有很多 的時候我們使用別人的程序包。然後添加東西的時候缺少什麽東西,會使程序編譯不過去,甚至無法運行,接下來介紹一下cmakelist.txt 的每一行的作用。為了以後添加和修改方便。 2.整體結

CMake 基本用法--寫CMakeList.txt

pac libraries argument -s .org library embedded other ppr http://techbase.kde.org/Development/Tutorials/CMake_(zh_CN) http://www.cma

如何寫cmake使其包含c++11特性 (-std=c++11如何寫進cmakeList.txt

g++ 4.8.2 cmake 2.8 之前寫cmkae編譯帶有c++11特性的程式碼有這麼一句: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 但是總會出現cc1plus: error: unrecognized

單個源文件下CmakeList.txt

使用 print cmake cut 但是 ${} 三種 tdi mat 單個源文件下CmakeList.txt 1. main.c代碼 & CmakeLists.txt 文件內容 在任意自己選定的目錄下(t1/)編寫main.c 與 CmakeLists.txt main

Cmake之CMakeLists.txt

        我們知道makefile是在Linux編譯c或者c++程式碼的時候的一種指令碼檔案,但是每一個功能都要寫一個makefile檔案,這樣如果這個工程很大,而且相關性比較強的話,makefile的書寫就會變得相對繁瑣,更要命的是如果以後需要新增

CMakeList.txt在大型檔案應用(以前端為例)

基本的CMakeLists.txt並不難,主要有生成庫、生成執行檔案、連結二者以及找庫、找標頭檔案、生成執行檔案、連結庫和執行檔案兩種方法組成。 但是遇到大型庫的編寫,目標是生成一個新的大型庫myslam,生成執行檔案、連結二者。需要提前宣告生成執行檔案在bin,庫在lib中,並把OPenCV、

【機器人學】機器人開源專案KDL原始碼學習:(7)examples中的CMakeList.txt檔案解讀

通過學習KDL開源專案的程式碼可以學習CMake構建程式的知識,現簡單介紹一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt檔案的指令。

ROS下的CMakeList.txt編寫

目錄 一、 概述 二、 整體結構和命令一覽 三、 CMake版本 四、 軟體包名稱 五、 查詢相關的CMake包

CMakeList.txt之設計前端10

基本的CMakeLists.txt並不難,主要有生成庫、生成執行檔案、連結二者以及找庫、找標頭檔案、生成執行檔案、連結庫和執行檔案兩種方法組成。 但是遇到大型庫的編寫,目標是生成一個新的大型庫myslam,生成執行檔案、連結二者。需要提前宣告生成執行檔案在bin,庫在lib

CMakelist.txt 配置各種庫

1.基本 # 設定為DEBUG模式 set(CMAKE_BUILD_TYPE "Debug") # 宣告要求的cmake最低版本 cmake_minimum_required(VERSION 2.8) # 宣告一個cmake工程 project(HelloSLAM) # 新增一個可執行程式 #

CMakeList.txt 模板

cmake_minimum_required(VERSION 3.2.0) add_definitions(-std=c++11) add_definitions(-g -o2) #define cuda,opencv,cudnn ADD_DEFINITIONS

建立Package及自定義CMakeList.txt

    建立Packages 1、Packages組成       catkin工作區的包必須包含三部分:package.xml、CMakeLists.txt以及每個包單獨的目錄(資料夾)       最簡單的包如下所示的結構: my_package/ CMake

CMakeList.txt設定OpenCv路徑

原始檔imageBasics.cpp #include <iostream> #include <chrono> using namespace std; #include <opencv2/core/core.hpp> #include <ope

Android gradle向cmakeList.txt 自定義傳參實現多model編譯不同庫

業務場景:針對多渠道每個Flavor下面可能使用編譯不同模組的NativeLib,這裡可以通過gradle構建是指定一些自定義引數傳遞給cmakeList.txt 在cmake這中進行控制。 gradle多渠道配置: productFlavors {

cmakelist.txt配置

設定cmake的最小使用版本,camke_minimum_required(VERSION 3.4.1) # Sets the minimum version of CMake required to build the native library. cmake_minimum_requir

VC\c++ 對文字檔案讀寫方法(sys,txt)

ofstream是從記憶體到硬碟,ifstream是從硬碟到記憶體,其實所謂的流緩衝就是記憶體空間; 在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O,stream這個類有兩個重要的運算子: 1、插入器(<

CMake之CMakeLists.txt編寫入門

自定義變數 主要有隱式定義和顯式定義兩種。  隱式定義的一個例子是PROJECT指令,它會隱式的定義< projectname >_BINARY_DIR和< projectname >_SOURCE_DIR兩個變數;顯式定義使用SET指令構建自定義變數,比如:SET(HELLO_

如何寫CmakeList.txt檔案使在qtcreator裡面顯示原始檔

cmake_minimum_required(VERSION 3.5) FILE(GLOB incs include/pcl/gpu/kinfu/*.h*) FILE(GLOB srcs src/*.c

Android Studio2.2.2以後版本用CMake方法配置OpenCV3.1.0完善版

1、新建一個支援c++的工程 2、修改app目錄下的build.gradle,在defaultConfig新增 將OpenCV-Android-sdk\sdk\native\libs下的libs檔案件拷到工程的main目錄下,並重命名為jniLibs 在android{}下