本文主要參考
1.cmake編譯原理
cmake是一種跨平台編譯工具,比make更為高階,使用起來要方便得多。cmake主要是編寫cmakelists.txt檔案,然後用cmake命令將cmakelists.txt檔案轉化為make所需要的makefile檔案,最後用make命令編譯原始碼生成可執行程式或共享庫(so(shared object))。因此cmake的編譯基本就兩個步驟:
cmake
make
cmake 指向cmakelists.txt所在的目錄,例如cmake … 表示cmakelists.txt在當前目錄的上一級目錄。cmake後會生成很多編譯的中間檔案以及makefile檔案,所以一般建議新建乙個新的目錄,專門用來編譯,例如:
mkdir build
cd build
cmake …
make
make根據生成makefile檔案,編譯程式。
2.使用cmake編譯程式
我們編寫乙個關於開平方的c/c++程式專案,即b= sqrt(a),以此理解整個cmake編譯的過程。
第1步,建立工程目錄:
$ mkdir m_sqrt
$ cd m_sqrt/
$ mkdir build include src
$ touch cmakelists.txt readme
完了以後你的工程目錄裡應該是這樣的:
同時include和src裡的是:
第2步,開始配置這個工程
在終端執行$ gedit cmakelists.txt,貼上以下**:
編寫cmakelists.txt檔案,該檔案放在和src,include的同級目錄,實際方**都可以,只要裡面編寫的路徑能夠正確指向就好了。cmakelists.txt主要包含以下的7個步驟,具體的意義,請閱讀相應的注釋。
#1.cmake verson,指定cmake版本
cmake_minimum_required(version 3.2)
#2.project name,指定專案的名稱,一般和專案的資料夾名稱對應
project(test_sqrt)
#3.head file path,頭檔案目錄
include_directories(
include
)#4.source directory,源檔案目錄
aux_source_directory(src dir_srcs)
#5.set environment variable,設定環境變數,編譯用到的原始檔全部都要放到這裡,否則編譯能夠通過,但是執行的時候會出現各種問題,比如"symbol lookup error ***xx , undefined symbol"
set(test_math$)
#6.add executable file,新增要編譯的可執行檔案
add_executable($ $)
#7.add link library,新增可執行檔案所需要的庫,比如我們用到了libm.so(命名規則:lib+name+.so),就新增該庫的名稱
target_link_libraries($ m)
第3步,編寫**
標頭檔案b.h,如下所示:
#ifndef b_file_header_inc
#define b_fiel_header_inc
#includedouble cal_sqrt(double value);
#endif
標頭檔案b.c,如下所示:
#include "../include/b.h"
double cal_sqrt(double value)
main.c主函式,如下所示:
#include "../include/b.h"
#include int main(int argc, char** argv)
第四步、編譯和執行程式
注意進入到build裡
cd build
cmake ..
make
編譯完,在build的目錄下生成了乙個可執行的檔案test_sqrt,執行獲取結果如下:
命令:
./test_sqrt
結果:input a:49.000000
sqrt result:7.000000
基礎知識(十五)Cmake
cmake學習筆記 cmake minimum required version 2.6 cmake版本要求 project tiny cnn 設定專案名稱 set src main.c 定義變數src等於main.c add executable tiny cnn 生成可執行檔名tiny cnn ...
Python基礎知識講解
1.1 配置環境變數 將python的安裝目錄新增到系統的環境變數中,在這裡python的預設安裝路徑是 c python27,按照下面的方法將python所在路徑新增到環境變數中 我的電腦 屬性 高階 環境變數 在path變數的末尾新增 c python27即可。不同變數使用 符號分隔 在cmd中...
ECMAScript JS 基礎知識講解
下面這個方法能輸入0 1 2 9嗎?顯然是不可以的,輸出結果是10個10。function test return arr var arrs test for var j 0 j arrs.length j 利用立即執行函式把0到9輸出。這種寫法沒什麼意義,還不如直接寫個for迴圈 function...