日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CMakeList--->CMakeList的编写,cmake,平台通用项目构建工具

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,平台通用项目构建工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。