系統(tǒng)化學(xué)習(xí)cmake_3_static-library

介紹

顯示了一個helloworld示例,該示例首先創(chuàng)建并鏈接了一個靜態(tài)庫挪丢。這是一個簡化的示例莽鸭,顯示了庫和二進(jìn)制文件在同一個文件夾中。
本教程中的文件包括:

$ tree
.
├── CMakeLists.txt
├── include
│   └── static
│       └── Hello.h
└── src
    ├── Hello.cpp
    └── main.cpp
  • CMakeLists.txt - 包含要運行的CMake命令
  • include/Hello.h - 頭文件
  • src/Hello.cpp - 資源文件
  • src/main.cpp - main文件

概念

添加一個靜態(tài)庫

add_library( )函數(shù)用來從源文件創(chuàng)造一個庫吃靠,調(diào)用方法如下:

add_library(hello_library STATIC
    src/Hello.cpp
)

這將用于創(chuàng)建一個名為libhello_library.a的靜態(tài)庫硫眨,其中包含add_library調(diào)用中的源。
如前一個示例中所述,我們將源文件直接傳遞給add_library調(diào)用礁阁,這是現(xiàn)代CMake的建議巧号。

添加頭文件目錄

在這個實例中,我們使用target_include_directories()函數(shù)將范圍設(shè)置為PUBLIC姥闭。

target_include_directories(hello_library
    PUBLIC
        ${PROJECT_SOURCE_DIR}/include
)

這將使在以下位置使用包含的目錄:

  • 當(dāng)編譯鏈接庫的任何其他目標(biāo)時丹鸿。

  • 編譯庫

作用域的含義是:

  • PRIVATE-目錄被添加到此目標(biāo)的include目錄中。
  • INTERFACE-該目錄將添加到鏈接此庫的任何目標(biāo)的include目錄中棚品。
  • PUBLIC-如上所述靠欢,它包含在這個庫中,也包含在鏈接此庫的任何目標(biāo)中铜跑。

在使用target_include_directories( )函數(shù)后门怪,c++文件只需要引入相對路徑即可,這有效避免了文件引用沖突锅纺。如:

#include "static/Hello.h"

鏈接庫

當(dāng)創(chuàng)建一個使用你的庫的可執(zhí)行文件時掷空,你必須告訴編譯器關(guān)于這個庫的信息。這可以使用target_link_libraries()函數(shù)完成囤锉。

add_executable(hello_binary
    src/main.cpp
)

target_link_libraries( hello_binary
    PRIVATE
        hello_library
)

在二進(jìn)制文件進(jìn)行鏈接時告訴cmake去鏈接hello_library坦弟。它還將從鏈接庫目標(biāo)傳播任何具有公共或接口作用域的include目錄。

編譯器調(diào)用的一個例子:

/usr/bin/c++ CMakeFiles/hello_binary.dir/src/main.cpp.o -o hello_binary -rdynamic libhello_library.a

構(gòu)建例子

$ mkdir build

$ cd build

$ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/C-static-library/build

$ make
Scanning dependencies of target hello_library
[ 50%] Building CXX object CMakeFiles/hello_library.dir/src/Hello.cpp.o
Linking CXX static library libhello_library.a
[ 50%] Built target hello_library
Scanning dependencies of target hello_binary
[100%] Building CXX object CMakeFiles/hello_binary.dir/src/main.cpp.o
Linking CXX executable hello_binary
[100%] Built target hello_binary

$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  hello_binary  libhello_library.a  Makefile

$ ./hello_binary
Hello Static Library!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官地,一起剝皮案震驚了整個濱河市酿傍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驱入,老刑警劉巖拧粪,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沧侥,居然都是意外死亡可霎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門宴杀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癣朗,“玉大人,你說我怎么就攤上這事旺罢】跤啵” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵扁达,是天一觀的道長正卧。 經(jīng)常有香客問我,道長跪解,這世上最難降的妖魔是什么炉旷? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上窘行,老公的妹妹穿的比我還像新娘饥追。我一直安慰自己,他們只是感情好罐盔,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布但绕。 她就那樣靜靜地躺著,像睡著了一般惶看。 火紅的嫁衣襯著肌膚如雪捏顺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天纬黎,我揣著相機(jī)與錄音幅骄,去河邊找鬼。 笑死莹桅,一個胖子當(dāng)著我的面吹牛昌执,可吹牛的內(nèi)容都是我干的烛亦。 我是一名探鬼主播诈泼,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煤禽!你這毒婦竟也來了铐达?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤檬果,失蹤者是張志新(化名)和其女友劉穎瓮孙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體选脊,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡杭抠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恳啥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偏灿。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钝的,靈堂內(nèi)的尸體忽然破棺而出翁垂,到底是詐尸還是另有隱情,我是刑警寧澤硝桩,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布沿猜,位于F島的核電站,受9級特大地震影響碗脊,放射性物質(zhì)發(fā)生泄漏啼肩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疟游。 院中可真熱鬧呼畸,春花似錦、人聲如沸颁虐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽另绩。三九已至儒陨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋籽,已是汗流浹背蹦漠。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留车海,地道東北人笛园。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像侍芝,于是被迫代替她去往敵國和親研铆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348