CMake 學(xué)習(xí)(持續(xù)更新......)

CMakeLists.txt里添加宏開關(guān)

比如添加打印log的宏LOG,代碼如下

option(DEFINE__LOG__ "print log" ON)
if(DEFINE__LOG__)
    add_definitions(-D__LOG__)
endif(DEFINE__LOG__)

但在源碼里面不能有

#define __LOG__

這樣就可以在cmake的時候開關(guān)這個宏了

cmake -D__LOG__=ON ..

CMakeLists.txt 添加依賴項

  1. 如果添加的依賴項只有頭文件,那么就比較簡單黍衙,設(shè)定頭文件路徑匹层,添加即可呵晨。設(shè)定頭文件路徑有兩種方式吐限,如果可以通過find_package添加最好忽刽,如果不行天揖,就用set設(shè)定目錄,如下:
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})

或者

set(EIGEN3_INCLUDE_DIR ${FaceRecon_3RDPARTY_DIR}/eigen)
include_directories(${EIGEN3_INCLUDE_DIR})
  1. 如果添加的依賴項有對應(yīng)的鏈接庫缔恳,那么除了添加頭文件宝剖,還需要將鏈接庫添加進(jìn)去
find_package(OpenCV 3.4.3 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

如果添加的依賴庫是自己生成的,直接添加名字就行歉甚,比如添加hello庫

target_link_libraries(${PROJECT_NAME} hello)

如果是自己生成的依賴庫有很多万细,可放在lib目錄下,通過如下命令添加纸泄,這里只針對windows

FILE(GLOB suitesparse_libs "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/suitesparse/lib64/*.lib")
target_link_libraries(hello ${suitesparse_libs})
  1. 如果依賴項需要自己編譯對應(yīng)依賴庫赖钞,那么需要包含依賴項代碼,并為其編寫對應(yīng)CMakeLists.txt
    例如聘裁,對應(yīng)項目目錄如下:
demo
    CMakeLists.txt
    -include
    -src
    -thirdparty
        -hello
            -include
            -src
            CMakeLists.txt
        -eigen
        CMakeLists.txt

我們有自己編譯hello依賴項雪营,其中在demo目錄下的CMakeLists.txt里添加子目錄

add_subdirectory(thirdparty)

在thirdparty目錄下的CMakeLists.txt里添加子目錄

add_subdirectory(hello)

其中hello里的CMakeLists.txt只需要將平時生成可執(zhí)行文件的語句

add_executable(${PROJECT_NAME}  ${SOURCE_FILES} ${HEADER_FILES})

替換成

add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES})

這里 STATIC 表示是生成靜態(tài)庫

CMake aux_source_directory

讓CMake找到源文件

aux_source_directory(src SOURCE_FILES)
add_executable(demo ${SOURCE_FILES})

把當(dāng)前路徑下的src目錄下的所有源文件放到變量
SOURCE_FILES中

CMake FILE

FILE語句功能強大,可以讀衡便、寫献起、文件系統(tǒng)等洋访,具體可參考cmake官方網(wǎng)站

FILE(GLOB SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/hello/*.cpp)
FILE(GLOB HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h* ${CMAKE_CURRENT_SOURCE_DIR}/include/hello/*.h*)

文件系統(tǒng)的作用

set_target_properties

該命令一般用在導(dǎo)入第三方動態(tài)庫的時候,比如:

set_target_properties(lib_opencv
    PROPERTIES
    IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopencv_java3.so
    )

該命令語法如下:

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

設(shè)置target的PROPERTIES谴餐,上述例子中姻政,我們設(shè)置了opencv動態(tài)庫的路徑。

install

Specify rules to run at install time.
也就是在運行install的時候才會運行的語句

install(TARGETS targets... [EXPORT <export-name>]
    [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
      PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
     [DESTINATION <dir>]
     [PERMISSIONS permissions...]
     [CONFIGURATIONS [Debug|Release|...]]
     [COMPONENT <component>]
     [NAMELINK_COMPONENT <component>]
     [OPTIONAL] [EXCLUDE_FROM_ALL]
     [NAMELINK_ONLY|NAMELINK_SKIP]
    ] [...]
    [INCLUDES DESTINATION [<dir> ...]]
    )

可以將lib,framework,dll ,header等install到固定位置

debug , release

set(CMAKE_RELEASE_POSTFIX "")
set(CMAKE_DEBUG_POSTFIX "-debug")

可以通過debug還是release 生成對應(yīng)版本庫岂嗓,在鏈接該庫的時候:

target_link_libraries(LandmarkTracker PUBLIC debug ${ncnn_LIB_DEBUG} optimized ${ncnn_LIB_RELEASE})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汁展,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厌殉,更是在濱河造成了極大的恐慌食绿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件公罕,死亡現(xiàn)場離奇詭異器紧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熏兄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門品洛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摩桶,你說我怎么就攤上這事桥状。” “怎么了硝清?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵辅斟,是天一觀的道長。 經(jīng)常有香客問我芦拿,道長士飒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任蔗崎,我火速辦了婚禮酵幕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缓苛。我一直安慰自己芳撒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布未桥。 她就那樣靜靜地躺著笔刹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冬耿。 梳的紋絲不亂的頭發(fā)上舌菜,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機(jī)與錄音亦镶,去河邊找鬼日月。 笑死袱瓮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爱咬。 我是一名探鬼主播懂讯,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼台颠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勒庄,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤串前,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后实蔽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荡碾,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年局装,在試婚紗的時候發(fā)現(xiàn)自己被綠了坛吁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡铐尚,死狀恐怖拨脉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宣增,我是刑警寧澤玫膀,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站爹脾,受9級特大地震影響帖旨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜灵妨,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一解阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泌霍,春花似錦货抄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肋拔,卻和暖如春锈津,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凉蜂。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工琼梆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留性誉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓茎杂,卻偏偏與公主長得像错览,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子煌往,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355