CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具
生活随笔
收集整理的這篇文章主要介紹了
CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
視頻教程康康這個Bilibili點擊跳轉,由于本文信息密度大,比較詳細,可能略顯繁瑣,還請耐心閱讀🐱
文章目錄
- CMakeList 語法精述
- PROJECT 工程名
- SET 設置變量
- MESSAGE 打印信息
- ADD_EXECUTABLE 生成可執行文件
- ADD_SUBDIRECTORY 添加子目錄
- ADD_LIBARY 輸出庫
- SET_TARGET_PROPERTIES
- INCLUDE_DIRECTORIES 添加頭文件路徑
- LINK_DIRECTORIES 添加庫搜索路徑
- TARGET_LINK_LIBRARIES 添加庫名稱
- 內部構造和外部構造(更改cmake的生成目錄)
- CMakeList.txt添加子關聯CMakeList.txt,更好的進行工程組織
- Demo
- 經驗記錄
- windows cmake沒有生成 Makefile
- 參考
CMakeList 語法精述
PROJECT 工程名
- 功能是指定工程名,并且支持語言是C和C++PROJECT(project_name C CXX)
- 隱式定義了兩個cmake變量 <project_name>_BINARY_DIR與 <project_name>_SOURCE_DIR,可以直接使用,默認指向當前目錄
- 如果修改工程名這兩個變量的名字也會隨之改變,也可以使用cmake預定義的PEOJECT_BINARY_DIR和PEOJECT_SOURCE_DIR來代隱式定義的兩個變量,他們的內容是一樣的
SET 設置變量
- 用來設置指定的變量SET(SRC_LIST main.cpp test1.cpp test2.cpp)
MESSAGE 打印信息
- 向終端輸出用戶自定義的信息
- 包含三種信息
SEND_ERROR產生錯誤生成過程被跳過
SATUS生成前綴為- -的信息
FATAL_ERROR立即終止所有cmake過程
ADD_EXECUTABLE 生成可執行文件
- 生成可執行文件ADD_EXECUTABLE(HELLO main.cpp test1.cpp) #也可以寫成 ADD_EXECUTABLE(HELLO ${SRC_LIST})
ADD_SUBDIRECTORY 添加子目錄
- 添加子目錄,并且指定其生成文件存放目錄
如下添加源文件存放的src目錄,并指定存放目錄為bin,若不指定存放目錄,則會存放在src目錄中ADD_SUBDIRECTORY(src bin)
ADD_LIBARY 輸出庫
- 生成庫文件ADD_BIBARY(lib_name SHARD libSource.cpp)
- 可以生成SHARD(動態庫)、STATIC(靜態庫)兩種庫文件
SET_TARGET_PROPERTIES
- 指定輸出的名稱,對于動態庫還可以指定動態庫的版本和API
如下為創建同名動態庫和靜態庫ADD_LIBARY(hell_static STATIC hello.cpp) #重命名為hello SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") #創建時清理同名文件防止創建失敗 SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAR_DIRECT_OUTPUT 1)ADD_LIBARY(hell_share SHARE hello.cpp) #重命名為hello SET_TARGET_PROPERTIES(hell_share PROPERTIES OUTPUT_NAME "hello") #創建時清理同名文件防止創建失敗 SET_TARGET_PROPERTIES(hell_share PROPERTIES CLEAR_DIRECT_OUTPUT 1)
INCLUDE_DIRECTORIES 添加頭文件路徑
- 可以向工程添加多個頭文件的路徑,路徑之間用空格隔開INCLUDE_DIRECTORIES(path/include/)
LINK_DIRECTORIES 添加庫搜索路徑
- LINK_DIRECTORIES(path/lib/)
TARGET_LINK_LIBRARIES 添加庫名稱
- TARGET_LINK_LIBRARIES(project_name libname.so)
內部構造和外部構造(更改cmake的生成目錄)
- 將文件都生成在當前目錄是內部構造,這種情況很亂
- 將文件生成在其他位置是外部構造,可以更好的整理工程目錄#示例 在當前目錄創建一個文件夾(隨意命名),我命名為build #切換至build目錄下執行cmake 參數跟至CMakeList.txt存在的目錄即可,這里..找到上級目錄即可 #因為我的是windows環境,我需要指定生成makefile所以需要添加 -G "Unix Makefiles"cmake .. -G "Unix Makefiles"
CMakeList.txt添加子關聯CMakeList.txt,更好的進行工程組織
- 對于不同工程目錄下的文件有時候需要更好的組織起來
- 根目錄下編寫一個CMakeList.txt,src目錄下再編寫一個CMakeList.txt
- 其中根目錄 CMakeList.txt內容如下PROJECT(HELLO) #src 指存放源文件的子目錄 bin為其二進制文件和中間文件的存放目錄 ADD_SUBDIRECTORY(src bin)
- src目錄下 CMakeList.txt內容如下SET(SRC_LIST main.cpp)add_executable(hello ${SRC_LIST})
- 在build目錄下執行根目錄下的CMakeList.txt即可生成可執行文件
Demo
- 看了這么多來一個具體并且較大的工程練練手吧
- 以正點原子STM32F767 Apllo開發板的GPIO為模板開始Demo
- 新建CMakeLists.txt和build目錄
- 添加cmsis_gcc.h文件,是用gcc編譯所需的頭文件,一些宏也需要添加
經驗記錄
windows cmake沒有生成 Makefile
- windows10默認CMake會生成MSVC解決方案。在構建目錄中檢查 .sln 文件
- 刪除目錄下CMakeCache.txt(如果有的話);執行cmake . -G "Unix Makefiles" ; 然后可以執行make
參考
CMake 語法 - 詳解 CMakeLists.txt FILE的使用我是從這里找的
error: expected ‘(’ before ‘void’ __ASM void xxx gcc 編譯正點原子的sys.c報錯
總結
以上是生活随笔為你收集整理的CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件需求管理用例方法 pdf_企业内训“
- 下一篇: 物联网架构方案思考