色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CMake基本指令簡述

CHANBAEK ? 來源:編程圈子 ? 作者:編程圈子 ? 2023-03-13 15:41 ? 次閱讀

一、CMake 基本指令

1. ADD_DEFINITIONS

給編譯增加參數定義,如向 C/C++編譯器添加-D 參數,例:

ADD_DEFINITIONS(-DENABLE_DEBUG -DABC123),多個參數使用空格分割。

宏定義 #ifdef ENABLE_DEBUG #endif 會讓上面指令生效。

2. ADD_DEPENDENCIES

增加 make 里編譯依賴關系。

ADD_DEPENDENCIES(target-name depend-target1 depend-target2 ...)

兩個target有依賴關系時,使用此指令可以自動按順序編譯依賴,最后再連接目標。

3.ADD_EXECUTABLE

定義可執行文件的指令:

ADD_EXECUTABLE(hello main.cpp)

4.ADD_LIBRARY

調用其它庫,語法:

add_library( [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])
  • 其中表示鏈接庫文件的名字,全局唯一;庫的源文件可指定,也可用target_sources()后續指定。

  • 庫的類型: STATIC(靜態庫)、SHARED(動態庫)、MODULE(模塊庫)之一;如果不設置,也可以通過全局的 BUILD_SHARED_LIBS 來指定。

    windows下,如果dll沒有export任何信息,則不能使用SHARED,要標識為MODULE。

添加的庫會被輸出到以下幾個目錄:

  • ARCHIVE_OUTPUT_DIRECTORY
  • LIBRARY_OUTPUT_DIRECTORY
  • RUNTIME_OUTPUT_DIRECTORY
  • 設置EXCLUDE_FROM_ALL,可使這個library排除在all之外,即必須明確點擊生成才會生成。

5. ADD_SUBDIRECTORY

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

這個指令用于向當前工程添加存放源文件的子目錄,并可以指定中間二進制和目標二進制存放的位置。

  • EXCLUDE_FROM_ALL 參數的含義是將這個子目錄的所有target排除在all target列表之外,這樣當執行make時,這個子目錄的所有target就不會被編譯。

6. CMAKE_MINIMUM_REQUIRED

CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])

檢查cmake的版本,要求最低版本為versionNumber。例如 CMAKE_MINIMUM_REQUIRED(VERSION 2.5 FATAL_ERROR) 。

7. INCLUDE_DIRECTORIES

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

指定頭文件的搜索路徑。

例:

include_directories(/usr/local/include)

來讓庫文件搜索以/usr/local/include為基礎,然后在main函數前寫上:

#include “opencv/cv.h"

8. LINK_DIRECTORIES

LINK_DIRECTORIES(directory1 directory2 ...)

添加需要鏈接的庫文件目錄,相當于g++命令的-L選項的作用。 該指令有時候不一定需要,因為find_package和find_library指令可以得到庫文件的絕對路徑。

一般自己寫的動態庫文件放在自己新建的目錄下時,可以用該指令定位,如:

LINK_DIRECTORIES("/home/my/mylib/bin/mylibs")

9. LINK_LIBRARIES

LINK_LIBRARIES(library1 library2 ...)

添加需要鏈接的庫文件路徑,注意這里是全路徑,要用在add_executable之前。示例:

LINK_LIBRARIES("/home/my/mylib/bin/mylibs/aaa.so")

10. TARGET_LINK_LIBRARIES

TARGET_LINK_LIBRARIES(target library1

為庫或二進制可執行文件添加庫鏈接,要用在add_executable之后。 上述指令中的target是指通過add_executable()和add_library()指令生成已經創建的目標文件。示例:

TARGET_LINK_LIBRARIES(myProject hello),連接libhello.soTARGET_LINK_LIBRARIES(myProject libhello.a)

11. PKG_CHECK_MODULES

pkg_check_modules(

pkg_check_modules 是 CMake 自己的 pkg-config 模塊 的一個用來簡化的封裝:你不用再檢查 CMake 的版本,加載合適的模塊,檢查是否被加載,等等,參數和傳給 find_package 的一樣:先是待返回變量的前綴,然后是包名(pkg-config 的)。這樣就定義了_INCLUDE_DIRS和其他的這類變量,后續的用法就與 find_package 一致。

二、 CMake的宏、模塊、函數

1. 宏 macro定義:

macro( [arg1 [arg2 [arg3 ...]]])
...
endmacro([name])

2. function定義:

function( [arg1 [arg2 [arg3 ...]]])
...
endfunction([name])

函數和宏都有默認內部變量可以使用:

變量 說明
ARGV# ARGV0為第一個參數,ARGV1為第二個參數,依次類推
ARGV 定義宏(函數)時參數為2個,實際傳了4個,則ARGV代表實際傳入的兩個
ARGN 定義宏(函數)時參數為2個,實際傳了4個,則ARGN代表剩下的兩個
ARGC 實際傳入的參數的個數

調用示例:

# 定義函數
Function(myfunction ag1 ag2)
message(STATUS "function ag is " ${ag1})
message(STATUS "function ag is " ${ag2})
endfunction(myfunction)


# 定義宏
macro(mymacro ag1 ag2)
message(STATUS "macro ag is " ${ag1})
message(STATUS "macro ag is " ${ag2})
endmacro(mymacro)

# 調用函數
myfunction(1 2 3)
message(STATUS "\\n")

# 調用宏
mymacro(1 2 3)

要注意的是 宏的ARGN、ARGV等內部變量不能直接在if、foreach(…IN LISTS…)等邏輯語句中使用。

二、模塊

1. 模塊說明

CMakeLists.txt和**.cmake結尾的文件可以用來作為CMake的模塊文件,用來封裝一些函數功能,再使用include(**.cmake)方式引用。

cmake系統本身內置了一些預定義的模塊,如FindCURL模塊。

預定義模塊可以通過FIND_PACKAGE指令來引用。

2. 模塊定義示例

根目錄的主Cmake文件定義

# CMake 最低版本號要求
cmake_minimum_required (VERSION 2.8)

# 項目工程名
project (example)
message(STATUS "root This is BINARY dir " ${PROJECT_BINARY_DIR})
message(STATUS "root This is SOURCE dir " ${PROJECT_SOURCE_DIR})

# 添加子目錄
ADD_SUBDIRECTORY(subDirectory)

子模塊定義

創建

subDirectory/CMakeLists.txt,內容如下:

# 打印信息
message(STATUS "src This is BINARY dir " ${PROJECT_BINARY_DIR})
message(STATUS "src This is SOURCE dir " ${PROJECT_SOURCE_DIR})

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# CMAKE_SOURCE_DIR 是cmake內置變量,工程根目錄的CMakeLists.txt文件路徑
SET(ROOT_DIR ${CMAKE_SOURCE_DIR})

# 構建可執行程序
ADD_EXECUTABLE(example main.cpp)

# 查找指定的庫,CURL是
FIND_PACKAGE(CURL)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    4

    文章

    3551

    瀏覽量

    88922
  • 指令
    +關注

    關注

    1

    文章

    608

    瀏覽量

    35763
  • C++
    C++
    +關注

    關注

    22

    文章

    2112

    瀏覽量

    73720
  • 編譯器
    +關注

    關注

    1

    文章

    1636

    瀏覽量

    49175
  • CMake
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1285
收藏 人收藏

    評論

    相關推薦

    cmake是什么?cmake的特性和編譯原理(cmake原理和cmake編譯過程)

    CMake是一個開源、跨平臺的工具系列,是用來構建、測試和打包軟件。
    的頭像 發表于 07-18 10:53 ?4726次閱讀
    <b class='flag-5'>cmake</b>是什么?<b class='flag-5'>cmake</b>的特性和編譯原理(<b class='flag-5'>cmake</b>原理和<b class='flag-5'>cmake</b>編譯過程)

    Windows下編譯工具CMake的安裝和最簡使用

    MCU的開發環境一般在Windows操作系統上,簡單的工程一般直接編寫Makefile文件后使用make工具構建程序,復雜的工程一般借助CMake來生成Makefile文件后使用make工程構建程序
    的頭像 發表于 11-14 10:18 ?8508次閱讀
    Windows下編譯工具<b class='flag-5'>CMake</b>的安裝和最簡使用

    14. 在 CMake 中自定義宏___CMake 保姆級教程【C_C++】

    CMake
    jf_97106930
    發布于 :2023年05月19日 12:49:38

    交叉平臺開源編譯系統_cmake入門

    交叉平臺開源編譯系統_cmake入門
    發表于 01-22 13:59 ?9次下載

    Cmake學習的總結(二)

    大家好,上次給大家分享了第一篇 cmake 文章:cmake學習總結(一),今天繼續給大家分享cmake。那么廢話就不多說,開始內容分享。
    的頭像 發表于 12-24 17:54 ?650次閱讀

    cmake管理配置ROOT項目的方法

    ROOT作為使用C++開發的工具庫,自然少不了cmake這個項目組織工具。本文簡單介紹下cmake管理配置ROOT項目的方法,先上總圖 ? ? ? 本項目有一個頭文件,兩個源文件以及一個cmake
    的頭像 發表于 01-18 17:45 ?4655次閱讀
    <b class='flag-5'>cmake</b>管理配置ROOT項目的方法

    如何使用CMake工具套件構建CUDA應用程序

    我希望這篇文章向您展示了 CMake 如何自然地支持構建 CUDA 應用程序。如果您是 CMake 的現有用戶,請試用 CMake 3 . 9 并利用改進的 CUDA 支持。如果您不是 CMa
    的頭像 發表于 04-01 17:42 ?4576次閱讀
    如何使用<b class='flag-5'>CMake</b>工具套件構建CUDA應用程序

    RT-Thread V4.1.0新特性CMake介紹與構建CMake工程

    ? ? CMake 支持 在 RT-Thread 4.1.0 正式發布版中,添加了對 CMake 的支持。開發者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持
    的頭像 發表于 05-24 19:20 ?3045次閱讀

    RT-Thread 4.1.0的CMake構建教程

    CMake 支持 在 RT-Thread 4.1.0 正式發布版中,添加了對 CMake 的支持。開發者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發表于 05-25 11:06 ?3399次閱讀

    CMake用法詳解

    CMake用法詳解
    發表于 10-25 16:28 ?2次下載

    CMake的實戰教程-1

    CMake 是一個跨平臺的構建系統生成工具。它使用平臺無關的 CMake 清單文件CMakeLists.txt,指定工程的構建過程;源碼樹的每個路徑下都有這個文件。CMake 產生一個適用于具體平臺的構建系統,用戶使用這個系統構
    的頭像 發表于 02-14 10:42 ?724次閱讀
    <b class='flag-5'>CMake</b>的實戰教程-1

    cmake常用命令解析使用

    cmake構建工程需要知道的基礎命令。
    發表于 09-18 17:53 ?0次下載

    在Linux下如何使用CMake編譯程序

    CMake是開源、跨平臺的構建工具,可以讓我們通過編寫簡單的配置文件去生成本地的Makefile,這個配置文件是獨立于運行平臺和編譯器的,這樣就不用親自去編寫Makefile了,而且配置文件可以直接
    的頭像 發表于 11-08 16:15 ?6528次閱讀
    在Linux下如何使用<b class='flag-5'>CMake</b>編譯程序

    CMake構建后的項目結構解析

    一、 CMake構建后的項目結構解析(Analysis of the Project Structure After CMake Build) 1.1 CMake構建后的目錄結構(Directory
    的頭像 發表于 11-10 10:27 ?2152次閱讀
    <b class='flag-5'>CMake</b>構建后的項目結構解析

    請問一下CMake和Make之間的區別有哪些?

    CMake和Make是構建軟件,其工作涉及將源代碼轉換為可執行程序。CMake和Make是旨在實現構建過程自動化的工具,幫助開發者節省時間和精力。
    的頭像 發表于 02-27 11:44 ?1793次閱讀
    主站蜘蛛池模板: 亚洲成人在线免费| 男人吃奶摸下弄进去好爽| 古代荡女丫鬟高H辣文纯肉| 国产啪精品视频网免费| 久久这里只有热精品18| 新金梅瓶玉蒲团性奴3| freevideoshd| 女性露出奶头流出精子| 51成人精品午夜福利AV免费七| 九九热久久只有精品2| 亚洲精品国偷拍自产在线 | 国产午夜精品一区理论片飘花| 四库影院永久国产精品| 高H高肉强J短篇校园| 色欲档案之麻雀台上淫| 丰满艳妇亲伦| 无码射肉在线播放视频| 国产伦精品一区二区免费| 西西人体大胆牲交PP6777| 国产免费看片| 亚洲欧美综合中文字幕| 九九精品视频在线播放| 在线观看视频中文字幕| 美女搞鸡网站| XXX国产麻豆HD真实乱| 涩涩网站在线看| 国产一级特黄a大片99| 一边摸一边桶一边脱免费| 久久网站视频| av女优快播| 视频一区视频二区ae86| 国内精品久久久久影院老司| 影音先锋色av男人资源网| 欧美XXXX69学生HD| 国产精品AV色欲蜜臀在线| 亚洲九九视频| 男人女人边摸边吃奶边做| 二级特黄绝大片免费视频大片| 性欧美xxxxporn| 伦理片飘花手机在线| 凤楼app|