cmake添加一個(gè)庫的實(shí)現(xiàn)步驟
項(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++文件關(guān)鍵詞快速定位出現(xiàn)的行號(hào)實(shí)現(xiàn)高效搜索
這篇文章主要為大家介紹了C++文件關(guān)鍵詞快速定位出現(xiàn)的行號(hào)實(shí)現(xiàn)高效搜索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
C/C++實(shí)現(xiàn)目錄監(jiān)視器的方法詳解
這篇文章主要介紹了C/C++ 實(shí)現(xiàn)目錄監(jiān)視器的方法,然后網(wǎng)上查到的基本就有三種方法,使用FindFirstChangeNotification等系列函數(shù),使用ReadDirectoryChangesW函數(shù)和使用change journals,本文使用了第二種方式來實(shí)現(xiàn)一個(gè)目錄監(jiān)視,需要的朋友可以參考下2024-04-04
VS2019+MPI配置過程的實(shí)現(xiàn)步驟
本文介紹了在VS2019上配置MPI,包括下載和安裝MPI、創(chuàng)建項(xiàng)目、配置屬性、導(dǎo)入頭文件和庫文件、添加依賴項(xiàng)等步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議
本文主要介紹了如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議,對(duì)C語言和web感興趣的同學(xué),可以詳細(xì)看下,并且試驗(yàn)一下。2021-05-05
Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法
這篇文章主要介紹了Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法,重點(diǎn)講解了圖標(biāo)的繪制技巧,需要的朋友可以參考下2016-04-04

