Cmake 入門
Cmake 入門
前言
- CMake是一個比make更高階的編譯配置工具,它可以根據不同平臺、不同的編譯器,生成相應的Makefile或者vcproj專案
- 通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建專案生成目標檔案,還支援安裝(make install)、測試安裝的程式是否能正確執行(make test,或者ctest)、生成當前平臺的安裝包(make package)、生成原始碼包(make package_source)、產生Dashboard顯示資料並上傳等高階功能,只要在CMakeLists.txt中簡單配置,就可以完成很多複雜的功能,包括寫測試用例。
- 如果有巢狀目錄,子目錄下可以有自己的CMakeLists.txt。
下載
下載網頁
https://cmake.org/download/
下載地址
https://cmake.org/files/v3.9/cmake-3.9.2-win64-x64.msi
示例
結構
├── build
├── include
| └── add.h
└── src
├── add.c
└── main.c
── CMakeLists.txt
程式碼
- add.h
int add(int a,int b);
- add.c
#include "../include/add.h"
int add(int a,int b)
{
return a+b;
}
- main.c
#include "../include/add.h"
#include <stdio.h>
int main(int argc,char** argv)
{
int reslut=add(3,4);
printf("結果 %d ",reslut);
return 0;
}
- CMakeLists.txt
#1.cmake verson,指定cmake版本
cmake_minimum_required(VERSION 2.6)
#2.project name,指定專案的名稱,一般和專案的資料夾名稱對應
PROJECT(main)
#包含的標頭檔案目錄
INCLUDE_DIRECTORIES(
include
)
#指定原始檔目錄
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
MESSAGE(STATUS "開始構建")
#設定
SET(TEST_MATH ${DIR_SRCS})
ADD_EXECUTABLE(${PROJECT_NAME} ${TEST_MATH})
- CMake命令是大小寫不敏感的,你可以用大寫,也可以用小寫,也可以混寫。
- ${CMAKE_CURRENT_SOURCE_DIR}表示CMakeLists.txt所在的目錄
語法
-
註釋
變數:使用set命令顯式定義及賦值,在非if語句中,使用${}引用,if中直接使用變數名引用;
後續的set命令會清理變數原來的值;command (args ...)
命令不分大小寫,引數使用空格分隔,使用雙引號引起引數中空格set(var a;b;c) <=> set(var a b c)
定義變數var並賦值為a;b;c這樣一個string listAdd_executable(${var}) <=> Add_executable(a b c)
變數使用${xxx}引用條件語句:
if(var) #var 非empty 0 N No OFF FALSE... #非運算使用NOT
else()/elseif() … endif(var)
迴圈語句
Set(VAR a b c)
Foreach(f ${VAR}) …Endforeach(f)迴圈語句
WHILE() … ENDWHILE()
內部變數
- CMAKE_C_COMPILER:指定C編譯器
- CMAKE_CXX_COMPILER:
- CMAKE_C_FLAGS:編譯C檔案時的選項,如-g;也可以通過add_definitions新增編譯選項
- EXECUTABLE_OUTPUT_PATH:可執行檔案的存放路徑
- LIBRARY_OUTPUT_PATH:庫檔案路徑
- CMAKE_BUILD_TYPE::build 型別(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug
- BUILD_SHARED_LIBS:Switch between shared and static libraries
命令
- project (HELLO) #指定專案名稱,生成的VC專案的名稱;
使用${HELLO_SOURCE_DIR}表示專案根目錄
- include_directories:指定標頭檔案的搜尋路徑,相當於指定gcc的-I引數
include_directories (${HELLO_SOURCE_DIR}/Hello) #增加Hello為include目錄
- link_directories:動態連結庫或靜態連結庫的搜尋路徑,相當於gcc的-L引數
link_directories (${HELLO_BINARY_DIR}/Hello) #增加Hello為link目錄
- add_subdirectory:包含子目錄
add_subdirectory (Hello)
- add_executable:編譯可執行程式,指定編譯,好像也可以新增.o檔案
add_executable (helloDemo demo.cxx demo_b.cxx) #將cxx編譯成可執行檔案——
- add_definitions:新增編譯引數
add_definitions(-DDEBUG)將在gcc命令列新增DEBUG巨集定義;
add_definitions( “-Wall -ansi –pedantic –g”)
- target_link_libraries:新增連結庫,相同於指定-l引數
target_link_libraries(demo Hello) #將可執行檔案與Hello連線成最終檔案demo
- add_library:
add_library(Hello hello.cxx) #將hello.cxx編譯成靜態庫如libHello.a
add_custom_target:
message( status|fatal_error, “message”):
在指定目錄下搜尋一個庫, 儲存在變數MY_LIB中
find_ibrary(MY_LIB libmylib.a ./)
- set_target_properties( ... ):
lots of properties... OUTPUT_NAME, VERSION,....
- link_libraries( lib1 lib2 ...):
All targets link with the same set of libs
相關文章
- CMake入門教程
- CMake簡易入門
- CMake極速入門
- (CMake):CMake安裝及快速入門案例
- CMake入門指南-編譯教程編譯
- c++ cmake及包管理工具conan簡單入門C++NaN
- CMake入門1/5:基於阿里雲ECS搭建體驗環境阿里
- 【CMake】掌握CMake基本操作
- cmake報錯CMake Error: Could not find CMAKE_ROOTError
- CMake生成eclipse的工程並匯入Eclipse
- CMake 簡介和 CMake 模板
- cmake
- qtDesignerStudio 生成 cmake 專案匯入 qtcreatorQT
- 入門入門入門 MySQL命名行MySql
- cmake 模板
- cmake cuda
- cmake + JNI
- CMake 使用
- MySQL 5.7.17 安裝報錯CMake Error at cmake/boost.cmake:81 (MESSAGE)MySqlError
- <<Modern CMake>> 翻譯 2. CMake 基礎
- <<Modern CMake>> 翻譯 2.2 CMake 程式設計程式設計
- 如何入CTF的“門”?——所謂入門就是入門
- 何入CTF的“門”?——所謂入門就是入門
- CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found.Error
- scala 從入門到入門+
- makefile從入門到入門
- ACM入門之新手入門ACM
- make與cmake
- cmake筆記筆記
- redhat 6.8升級預設cmake 2.8到cmake 3.9Redhat
- cmake的使用(cmake不是內部或外部命令)
- 【小入門】react極簡入門React
- gRPC(二)入門:Protobuf入門RPC
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | RecyclerView使用入門AndroidView
- linux新手入門――shell入門(轉)Linux
- CMAKE工具學習