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{}下