最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

cmake添加一個(gè)庫的實(shí)現(xiàn)步驟

 更新時(shí)間:2023年06月12日 14:45:52   作者:波雅_(tái)漢庫克  
本文主要介紹了cmake添加一個(gè)庫的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目格式

Step2

  • mathFunctions/CMakeLists.txt mysqrt.cxx MathFunctions.h
  • CMakeList.txt
  • tutorial.cxx
  • Tutorial.h.in

cmake基本語法

設(shè)置編譯器

set (CMAKE_C_COMPILER "D:/Program Files/LLVM/bin/gcc")
set (CMAKE_CXX_COMPILER "D:/Program Files/LLVM/bin/g++")

CMAKE_C_COMPILER C語言編譯器,CMAKE_CXX_COMPILER C++編譯器。

添加庫

add_subdirectory(MathFunctions)

添加的MathFunctions就是文件夾的名字也可以理解為庫的名字

鏈接庫

target_link_libraries(Tutorial PUBLIC MathFunctions)

第一個(gè)參數(shù)是生成的可執(zhí)行文件,中間的是公有的,第三個(gè)參數(shù)是庫的名字.

添加庫的頭文件

target_include_directories(Tutorial PUBLIC ${PROJECT_SOURCE_DIR}/MathFunctions ${PROJECT_BINARY_DIR})

第一個(gè)參數(shù)是生成的可執(zhí)行文件,中間的是公有的,第三個(gè)參數(shù)是庫的路徑,應(yīng)該說后面的參數(shù)都是路徑.

其中:

${PROJECT_SOURCE_DIR} 這個(gè)變量是主Cmake文件的變量

${PROJECT_BINARY_DIR}這個(gè)變量是cmake -B生成的路徑的變量

cmake打印字符串

message("hello world")
message(${PROJECT_SOURCE_DIR}/MathFunctions)

這個(gè)就是打印出來的字符串.

庫的cmake文件

這個(gè)cmake文件不需要寫那么多公共命令. 

cmake生辰庫

add_library(MathFunctions mysqrt.cxx)

這行代碼就是把cxx文件添加到庫中

mian函數(shù)中使用

添加頭文件

#include <MathFunctions.h>

可以直接使用尖括號(hào),因?yàn)閏make已經(jīng)把頭文件添加到可執(zhí)行文件中了.

然后直接調(diào)用函數(shù)即可.

讓庫成為可選的

cmake基本語法

設(shè)置option變量

option(USE_MYMATH "Use tutorial provided math implementation" ON)

設(shè)置一個(gè)USE_MATH的變量,第二個(gè)參數(shù)是說明字符串,第三個(gè)是啟動(dòng)或者關(guān)閉 ON是啟動(dòng),OFF是關(guān)閉.

注意:option這個(gè)設(shè)置變量一定要在configure_file(TutorialConfig.h.in TutorialConfig.h)這行前面才可以,要不然option設(shè)置的不起作用.

cmake設(shè)置條件鏈接庫

if (USE_MYMATH)
    add_subdirectory(MathFunctions)
    list(APPEND EXTRA_LIBS MathFunctions)
    list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR})
endif()

意思是如果USE_MYMATH為ON才可以鏈接自己的庫

其中強(qiáng)調(diào)兩行代碼就是list的代碼

  • list(APPEND EXTRA_LIBS MathFunctions)
  • list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR})

這兩行代碼你可以理解為依賴的庫聲明成一個(gè)變量列表,例如EXTRA_LIBS這個(gè)變量就是存儲(chǔ)的MathFunctions這個(gè)庫這里只有一個(gè)demo如果要鏈接十個(gè)八個(gè)只要在list后面空格添加就行,

EXTRA_INCLUDES這個(gè)也是同理,目的也是為了下面添加鏈接庫和添加頭文件的時(shí)候簡單一點(diǎn).

鏈接庫

target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})

這里就用到EXTRA_LIBS 這個(gè)列表

添加頭文件

target_include_directories(Tutorial PUBLIC 
                            ${EXTRA_INCLUDES}
                            ${PROJECT_BINARY_DIR})

這里就用到EXTRA_INCLUDES這個(gè)列表

修改cmake配置文件

#cmakedefine USE_MYMATH

添加一行這個(gè)代碼

USE_MYMATH這個(gè)變量就是對(duì)應(yīng)一開始的option設(shè)置的變量

如果option設(shè)置USE_MYMATH為ON, cmake配置文件生成的頭文件就會(huì)定義USE_MYMATH

這個(gè)不是自己寫的是cmake自己生成的. 

修改引用的源碼

 

更新鏈接庫的過程

如果每次主cmake文件每次鏈接一個(gè)庫都要target_include_directories一個(gè)庫名字就有點(diǎn)重復(fù),所以可以修改cmake庫來實(shí)現(xiàn)當(dāng)鏈接這個(gè)庫的時(shí)候就包含頭文件了。

第一步就是修改庫的cmake文件:

add_library(MathFunctions mysqrt.cxx)
target_include_directories(MathFunctions
    INTERFACE
    ${CMAKE_CURRENT_SOURCE_DIR})

第一行代碼是添加庫名字,第二行是添加庫的頭文件,第一個(gè)參數(shù)是庫的名字,

INTERFACE:第二個(gè)參數(shù)意思是當(dāng)鏈接這個(gè)庫的時(shí)候就要包含include第三個(gè)參數(shù)的頭文件,但是自己的庫不使用頭文件,

還有一個(gè)PUBLIC:

PUBLIC:這個(gè)的意思是不光鏈接這個(gè)庫的需要使用庫頭文件,自己也是用。一般這個(gè)使用的比較多。

第三個(gè)參數(shù)就是頭文件的路徑,

${CMAE_CURRENT_SOURCE_DIR}

這個(gè)變量是什么意思了?這個(gè)意思是當(dāng)前cmake文件的目錄,這個(gè)變量和${PROJECT_SOURCE_DIR}這個(gè)變量比較相似,這個(gè)是指定項(xiàng)目當(dāng)前的路徑。

主cmake文件就可以把上面鏈接MathFunctions文件可以刪除了。

到此這篇關(guān)于cmake添加一個(gè)庫的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)cmake添加庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++驗(yàn)證LeetCode包圍區(qū)域的DFS方法

    C++驗(yàn)證LeetCode包圍區(qū)域的DFS方法

    這篇文章主要介紹了C++驗(yàn)證LeetCode包圍區(qū)域的DFS方法,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中的strcmp函數(shù)

    C++中的strcmp函數(shù)

    strcmp函數(shù)是C++標(biāo)準(zhǔn)庫中用于字符串比較的重要函數(shù),在C++中,字符串比較是一項(xiàng)常見的操作,用于判斷兩個(gè)字符串是否相等或者大小關(guān)系,本文介紹C++中的strcmp函數(shù),感興趣的朋友一起看看吧
    2024-03-03
  • 深入了解C語言指針

    深入了解C語言指針

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下
    2021-07-07
  • C語言 圖文并茂詳解程序編譯過程

    C語言 圖文并茂詳解程序編譯過程

    C語言是一種編譯型語言,需要把源文件進(jìn)行編譯之后才能運(yùn)行,它的編譯過程是:預(yù)處理:展開頭文件、宏替換,去掉注釋,條件編譯;編譯:檢查語法,生成匯編;匯編:把生成的匯編文件匯編成機(jī)器碼;鏈接:鏈接到一起生成可執(zhí)行程序
    2022-04-04
  • 利用C語言模擬實(shí)現(xiàn)qsort,strcpy,strcat,strcmp函數(shù)

    利用C語言模擬實(shí)現(xiàn)qsort,strcpy,strcat,strcmp函數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何通過C語言模擬實(shí)現(xiàn)qsort(采用冒泡的方式),strcpy,strcat,strcmp等函數(shù),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • Inline Hook(ring3)的簡單C++實(shí)現(xiàn)方法

    Inline Hook(ring3)的簡單C++實(shí)現(xiàn)方法

    這篇文章主要介紹了Inline Hook(ring3)的簡單C++實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-08-08
  • Qt音視頻開發(fā)之視頻文件保存功能的實(shí)現(xiàn)

    Qt音視頻開發(fā)之視頻文件保存功能的實(shí)現(xiàn)

    和音頻存儲(chǔ)類似,視頻的存儲(chǔ)也對(duì)應(yīng)三種格式,視頻最原始的數(shù)據(jù)是yuv(音頻對(duì)應(yīng)pcm),視頻壓縮后的數(shù)據(jù)是h264(音頻對(duì)應(yīng)aac)。本文將利用Qt實(shí)現(xiàn)視頻文件保存功能,感興趣的可以了解一下
    2022-12-12
  • C++設(shè)計(jì)模式之命令模式

    C++設(shè)計(jì)模式之命令模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之命令模式,本文講解了什么是命令模式、命令模式的使用場(chǎng)合等內(nèi)容,并給出了一個(gè)代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法

    C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法,是數(shù)據(jù)結(jié)構(gòu)中二叉樹的一個(gè)經(jīng)典算法,有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C語言手把手教你實(shí)現(xiàn)貪吃蛇AI(中)

    C語言手把手教你實(shí)現(xiàn)貪吃蛇AI(中)

    這篇文章主要為大家詳細(xì)介紹了C語言手把手教你實(shí)現(xiàn)貪吃蛇AI的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論

绥滨县| 阿图什市| 澄城县| 蕉岭县| 寻乌县| 广西| 万年县| 凌源市| 彰武县| 杭锦旗| 浑源县| 礼泉县| 龙门县| 建宁县| 龙岩市| 搜索| 黄骅市| 大竹县| 海宁市| 城固县| 襄城县| 拜城县| 刚察县| 巫山县| 南通市| 万州区| 鹤山市| 七台河市| 新巴尔虎右旗| 成都市| 西丰县| 高唐县| 长丰县| 抚远县| 兴仁县| 遵化市| 高淳县| 长沙市| 修文县| 故城县| 桦南县|