CMake實(shí)踐

由于之前編譯代碼一直用Makefile, 但是新公司都用CMake來(lái)編譯,就花了一天的時(shí)間把Makefile換成CMakeLists.txt. 把學(xué)習(xí)的過(guò)程記錄下來(lái)

先介紹下代碼目錄

.
├── CMakeLists.txt
├── include
│   ├── event.h
│   ├── openssl
├── lib
│   ├── libevent.a
│   └── libssl.a
├── server
│   ├── CMakeLists.txt
│   ├── server.cpp
│   ├── server.h
│   ├── licAuth.conf
├── src
│   ├── CMakeLists.txt
│   ├── src1.cpp
│   ├── src1.h
└── test
    ├── CMakeLists.txt
    ├── test1.cpp
    └── test2.cpp
  • include: 頭文件, gcc/g++的 -I后面跟的就是此目錄
  • lib: 靜態(tài)庫(kù), -L 選項(xiàng)后面跟的目錄
  • server: server程序,這個(gè)程序要調(diào)用src目錄下的所有代碼產(chǎn)生的靜態(tài)庫(kù), 下面有個(gè)licAuth.conf是默認(rèn)的配置文件,make install的時(shí)候要安裝到/etc/目錄下面
  • src: 源文件, 要封裝成靜態(tài)庫(kù)以供別人調(diào)用
  • test: 一些測(cè)試程序,測(cè)試src目錄在的代碼

開(kāi)始

在我們寫(xiě)的代碼目錄src, server, test下都新建一個(gè)CMakeLIsts.txt, 根目錄下也要有, 注意不要拼錯(cuò)了,Lists大寫(xiě)的后面跟s.

根目錄下./CMakeLists.txt

cmake_minimum_required (VERSION 2.8) #照抄就行了
project(licAuth) # 隨便起個(gè)名字 然后LicAuth_SOURCE_DIR這個(gè)變量就等于該目錄
add_subdirectory(src) #表示編譯src目錄
add_subdirectory(server) #表示編譯server目錄
add_subdirectory(test) #同上

src目錄./src/CMakeLists.txt

cmake_minimum_required(VERSION 2.8) #照抄
project(lib) #還是隨便起 同時(shí)添加了一個(gè)lib_SOURCE_DIR變量

include_directories(${licAuth_SOURCE_DIR}/include) #添加頭文件目錄 相當(dāng)于 -I
link_directories(${licAuth_SOURCE_DIR}/lib) # 添加靜態(tài)庫(kù)目錄 相當(dāng)于 -L

# 添加一些編譯選項(xiàng), 比如-g之類(lèi)的
add_compile_options(-Wall -std=c++11 -Wunused-variable)
# 下面這兩個(gè)語(yǔ)句代表吧本目錄在的所有源文件打包成一個(gè)靜態(tài)庫(kù) liblic.a
aux_source_directory(. DIR_LIB_SRCS)
add_library (lic ${DIR_LIB_SRCS})

server目錄 ./server/CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
project (server)

# 添加include 和src下的頭文件
include_directories(${licAuth_SOURCE_DIR}/include ${lib_SOURCE_DIR}) 
# 添加lib和src下生成的靜態(tài)庫(kù)
link_directories(${licAuth_SOURCE_DIR}/lib ${lib_SOURCE_DIR})

#還是編譯選項(xiàng) 自己看著加
add_compile_options(-Wall -std=c++11 -O3 -flto -Wl,--no-as-needed  -Wunused-variable)

# 這里就要生成程序了 server是生成目標(biāo),后面跟源文件
add_executable(server server.cpp)
# 這是添加需要的庫(kù), 第一是目標(biāo)后面是需要的庫(kù) -liblic -lssl -lcrypto
target_link_libraries(server lic ssl crypto pthread protobuf event machineid)
#上面這兩句話相當(dāng)與 gcc -o server server.cpp -liblic -lssl -lcrypto

add_executable(client client.cpp)
target_link_libraries(client lic ssl crypto pthread protobuf event machineid)

# make install的配置, 把licAuth.conf 復(fù)制到/etc/目錄
INSTALL(FILES licAuth.conf DESTINATION /etc/)

test目錄下的就跟server目錄差不多了

編譯

編譯的時(shí)候最好新建一個(gè)目錄,在新建的目錄在cmake, 這樣可以很干凈的刪除cmake的中間產(chǎn)物,比如

mkdir build
cd build
cmake ..
make

當(dāng)測(cè)試完畢的時(shí)候 直接把build目錄刪除就好了 或者cmake出錯(cuò)的時(shí)候,也能清空build目錄重來(lái).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坟奥,一起剝皮案震驚了整個(gè)濱河市亮钦,隨后出現(xiàn)的幾起案子薄嫡,更是在濱河造成了極大的恐慌,老刑警劉巖伏恐,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異曾我,居然都是意外死亡勤家,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)掠手,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)憾朴,“玉大人,你說(shuō)我怎么就攤上這事喷鸽≈诶祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)砾省。 經(jīng)常有香客問(wèn)我鸡岗,道長(zhǎng),這世上最難降的妖魔是什么编兄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任轩性,我火速辦了婚禮,結(jié)果婚禮上狠鸳,老公的妹妹穿的比我還像新娘揣苏。我一直安慰自己,他們只是感情好件舵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布卸察。 她就那樣靜靜地躺著,像睡著了一般铅祸。 火紅的嫁衣襯著肌膚如雪坑质。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天个少,我揣著相機(jī)與錄音洪乍,去河邊找鬼。 笑死夜焦,一個(gè)胖子當(dāng)著我的面吹牛壳澳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茫经,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼巷波,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卸伞?” 一聲冷哼從身側(cè)響起抹镊,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荤傲,沒(méi)想到半個(gè)月后垮耳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遂黍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年终佛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雾家。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铃彰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芯咧,到底是詐尸還是另有隱情牙捉,我是刑警寧澤竹揍,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站邪铲,受9級(jí)特大地震影響芬位,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜带到,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一晶衷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阴孟,春花似錦晌纫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至慕嚷,卻和暖如春哥牍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喝检。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嗅辣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挠说。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓澡谭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親损俭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛙奖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容