青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CMake使用

cmake學習(一)靜態庫與動態庫構建

(.so)共享庫,shared object:節省空間,在運行時去連接,如果執行機器上沒有這些庫文件就不能執行。
(.a)靜態庫,archive:靜態庫和程序化為一體,不會分開。
通過 ldd命令可以查看一個可執行程序所依賴的的共享庫。
使用環境變量LD_LIBRARY_DIRECTORY可以指定共享庫位置


一、編譯共享庫:
ADD_LIBRARY(hello SHARED ${SHARED_LIBRARY})

二、添加靜態庫:
ADD_LIBRARY(hello STATIC ${STATIC_LIBRARY})
因為默認規則是不能有相同名字的共享庫與靜態庫,所以當生成靜態庫的時候(so后綴),共享庫會被刪除,因為只能允許一個名字存在,相同名字的會被替代(hello),所以需要通過SET_TARGET_PROPERTIES()來解決這個問題,例子:
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
cmake在構建一個target的時候,會刪除之前生成的target,一樣是通過設置SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)來達到目的
三、動態庫的版本號:
同樣是通過SET_TARGET_PROPERTIES()來設置
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
VERSION:動態庫版本
SOVERSION:API版本
最后生成的結果是:
libhello.so.1.2
libhello.so.1->libhello.so.1.2
libhello.so->libhello.so.1
四、安裝:
INSTALL(TARGETS hello hello_static
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
INSTALL(TARGETS hello.h
DESTINATION include/hello)
其他常用的屬性 PERMISSIONS:設置權限;RATTERN:設置正則表達式


Summary:
ADD_LIBRARY():添加一個庫,共享庫,靜態庫,模塊
SET_TARGET_PROPERTIES():設置輸出名稱,版本號,解決相同target被刪除的問題
GET_TARGET_PROEERTIES():與SET功能相對

cmake學習(二)常用變量和常用環境變量
一、變量的引用方式是使用“${}”,在IF中,不需要使用這種方式,直接使用變量名即可
二、自定義變量使用SET(OBJ_NAME xxxx),使用時${OBJ_NAME}
三、cmake的常用變量:
CMAKE_BINARY_DIR,PROJECT_BINARY_DIR,_BINARY_DIR:
這三個變量內容一致,如果是內部編譯,就指的是工程的頂級目錄,如果是外部編譯,指的就是工程編譯發生的目錄。
CMAKE_SOURCE_DIR,PROJECT_SOURCE_DIR,_SOURCE_DIR:
這三個變量內容一致,都指的是工程的頂級目錄。
CMAKE_CURRENT_BINARY_DIR:外部編譯時,指的是target目錄,內部編譯時,指的是頂級目錄
CMAKE_CURRENT_SOURCE_DIR:CMakeList.txt所在的目錄
CMAKE_CURRENT_LIST_DIR:CMakeList.txt的完整路徑
CMAKE_CURRENT_LIST_LINE:當前所在的行
CMAKE_MODULE_PATH:如果工程復雜,可能需要編寫一些cmake模塊,這里通過SET指定這個變量
LIBRARY_OUTPUT_DIR,BINARY_OUTPUT_DIR:庫和可執行的最終存放目錄
PROJECT_NAME:你猜~~

 

四、cmake中調用環境變量
1.Using $ENV{NAME} : invoke system environment varible.
We can use "SET(ENV{NAME} value)" as well. note that the "ENV" without "$".
2.CMAKE_INCLUDE_CURRENT_DIR equal to INCLUDE_DIRECTORY(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})


五、其他的內置變量
1.BUILD_SHARED_LIBS:set the default value when using ADD_LIBRARY()
2.CMAKE_C_FLAGS: set compiler for c language
2.CMAKE_CXX_FLAGS: set compiler for c++ language


六、區分debug和release
在工程目錄下,cmake -DCMAKE__BUILD_TYPE=DEBUG(RELEASE),再執行make


七、指定編譯32bit或64bit程序
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")

cmake學習(三)常用指令

一、基本指令:
INCLUDE_DIRECTORIES(${includedir}) #-I。
LINK_DIRECTORIES(${libdir}) #-L
TARGET_LINK_LIBRARIES(helloworld ${linkflags}) #-l
ADD_DEFINITIONS(${cflags}) #-D
 
1、ADD_DEFINATIONS:向C/CPP添加宏定義,相當于gcc中的-D,參數之間用空格分割
2、ADD_DEPENDICIES(target_name, depend_name):定義target對其他target的依賴關系
3、AUX_SOURCE_DIRECTORY(dir VARIBLE):把目錄下的所有源文件保存在變量中,基本用來創建源文件列表
4、ADD_EXECUTABLE:指定目錄,生成執行文件
5、EXEC_PROGRAM:外部調用指令,可移執行任何外部命令,后面加參數,例子如下:
EXEC_PROGERAM(ls ARGS"*.c" OUTPUT_VARIBLE LS_OUTPUT RETURN_VALUE LS_RVALUE)
IF(not LS_RVALUE)
MESSAGE(STATUS "xxx")
ENDIF(not LS_RVAULE)
PS.這里執行ls *.c指令,執行成功的話,返回0。
6、FILE指令:
FILE(WRITE file_name "content")
FILE(APPEND file_name "content")
FILE(READ file_name varible)
FILE(WRITE file_name "content")
7、FIND_系列指令:
LIBRARY( name path):
FIND_LIBRARY(Xorg X11 /usr/lib64)
IF(not Xorg)
MESSAGE(STATUS "no Xorg")
ENDIF(not Xorg)
FILE( name path)
PATH( name path)
PROGRAM( name path)
PACKAGE( [major.minor][QUIET][NO MODULE][[REQUIRED][COMPONTS][componts....]])
最后一條,用來調用放在CMAKE_MODULE_PATH下的Find.cmake模塊,也可以自定義Find模塊
首先通過SET(CMAKE_MODULE_PATH /home/...)來指定位置

8、控制指令:
IF(expression),ELSE(expression),ENDIF(expression)
express舉例:
否定:空,0,N,NO,OFF,FALSE,NOTFOUND或_NOTFOUND
肯定:COMMAND cmd,EXISTS dir/file,variable MARCHES regex等等等等還有很多~~~隨用隨查吧


cmake學習(四)模塊的使用和自定義模塊

FIND_PACKAGE
每一個模塊都會產生如下變量
_FOUND
_INCLUDE_DIR
_LIBRARY or _LIBRARIES
如果_FOUND為真,把_INCLUDE_DIR加入到INCLUDE_DIRECTORIES中,_LIBRARY加入到TARGET_LINK_LIBRARIES中。

編寫屬于自己的FindHello模塊:
1.FIND_PATH(HELLO_INCLUDE_DIR hello.h /usr/include/hello /usr/local/include/hello)
2.FIND_LIBRARY(HELLO_LIBRARY_DIR NAMES hello PATH /usr/lib /usr/local/lib)
  IF(HELLO_INCLUDE_DIR AND HELLO_LIBRARY)
  SET(HELLO_FOUND TRUE)
  ENDIF(HELLO_INCLUDE_DIR)
3.FIND_PACKAGE([major.minor][QUIET][NO_MODULE]
[[REQUIRED|COMPONENTS][componets...]])
QUIET參數:去掉輸出信息
REQUIRED參數:共享庫是否是工程必須的,如果是必須的,那么找不到
如果在src中想調用hello模塊中的內容
FIND_PACKAGE(HELLO)
為了可以讓工程找到FindHELLO.cmake
在主工程的CMakeList.txt中,SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_PATH}/cmake)
通過設置FIND_PACKAGE(HELLO QUIET)可以去掉輸出信息

Cmake CMAKE_BUILD_TYPE specification

That’s because no build type has been specified to CMake. The build type is a feature most IDE have, it allows you to compile your program in “debug” mode, for easily single-stepping through it with a debugger, or in “release” mode, with speed optimization enabled.

To fix this you simply need to specify a build type in the CMakeLists.txt file, in this way:


if( NOT CMAKE_BUILD_TYPE )
  set( CMAKE_BUILD_TYPE Debug CACHE STRING
       "Choose the type of build, options are: None Debug Release RelWithDebInfo
MinSizeRel."
       FORCE )
endif()

when cmake is run without specifying the build type using -D CMAKE_BUILD_TYPE, it is the Debug mode that is selected as the default.


 

posted on 2016-09-11 22:52 Daywei 閱讀(1289) 評論(0)  編輯 收藏 引用 所屬分類: Linux

<2013年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

牛人博客

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品女人网站| 激情欧美丁香| 亚洲一区二区三区四区视频| 亚洲精品一区二区三区蜜桃久| 欧美高清视频www夜色资源网| 在线精品视频一区二区三四| 欧美国产视频一区二区| 麻豆精品精华液| 99视频一区二区| 中文在线一区| 韩国av一区二区三区四区| 久久久噜噜噜久久久| 美脚丝袜一区二区三区在线观看| 亚洲看片免费| 亚洲午夜精品网| 国语精品中文字幕| 亚洲国产成人在线视频| 欧美精品成人91久久久久久久| 亚洲在线黄色| 久久激五月天综合精品| 日韩视频在线播放| 亚洲女性裸体视频| 亚洲三级视频在线观看| 一区二区三区日韩欧美| 国语自产精品视频在线看一大j8 | 国产日韩精品一区二区三区| 久久精品国产综合| 欧美成人激情视频免费观看| 亚洲欧美在线免费观看| 久久精品盗摄| 亚洲一区二区动漫| 久久久久久久久综合| 一区二区三区高清在线| 久久国产精品久久久久久电车| 亚洲精品看片| 久久狠狠亚洲综合| 亚洲一区在线视频| 欧美超级免费视 在线| 欧美在线亚洲| 欧美视频在线看| 亚洲国产精品传媒在线观看| 国产亚洲欧美一区二区| 999亚洲国产精| 亚洲欧洲一二三| 久久动漫亚洲| 欧美永久精品| 国产精品xxxxx| 亚洲第一福利社区| 在线播放日韩欧美| 欧美亚洲视频| 午夜一级久久| 国产精品激情电影| 日韩视频中文字幕| 99亚洲伊人久久精品影院红桃| 久久久久9999亚洲精品| 久久久久久国产精品mv| 国产精品免费一区二区三区观看 | 亚洲欧美成人网| 欧美成人免费在线视频| 蜜桃av噜噜一区| 国产一区二区久久精品| 午夜精品影院| 欧美呦呦网站| 国产亚洲精久久久久久| 亚洲午夜成aⅴ人片| 亚洲线精品一区二区三区八戒| 欧美国产视频在线| 亚洲经典自拍| 日韩一区二区精品| 欧美精品一区二区三| 亚洲激情av在线| 一区二区三区国产在线| 欧美日本国产视频| 一区二区三区四区五区在线| 亚洲调教视频在线观看| 国产精品xvideos88| 亚洲午夜一区二区| 欧美一区二区在线播放| 国产欧美亚洲一区| 欧美在线播放高清精品| 免费试看一区| 亚洲精品欧美日韩专区| 欧美日韩视频在线第一区| 一区二区国产精品| 久久成人一区| 亚洲国产1区| 欧美日韩网址| 亚洲欧美制服另类日韩| 久久尤物视频| 一本色道久久综合一区| 国产精品嫩草久久久久| 久久国产欧美精品| 欧美激情久久久久| 亚洲欧美日韩精品久久奇米色影视| 国产精品试看| 久久免费视频网站| 日韩小视频在线观看专区| 欧美在线播放视频| 91久久综合亚洲鲁鲁五月天| 欧美色精品在线视频| 午夜日韩福利| 91久久精品国产91久久性色tv | 国产一区二区精品丝袜| 美女网站久久| 亚洲午夜三级在线| 欧美福利视频在线观看| 亚洲欧美卡通另类91av| 在线观看亚洲视频| 国产精品女主播| 女同性一区二区三区人了人一| 一本色道久久88亚洲综合88| 免费观看在线综合| 亚洲欧美在线免费观看| 亚洲欧洲精品一区二区精品久久久| 国产精品高潮粉嫩av| 久久综合久色欧美综合狠狠| 亚洲永久在线| 亚洲人屁股眼子交8| 久久久久国产免费免费| 亚洲欧美另类中文字幕| 亚洲日本va在线观看| 国产亚洲欧美一区在线观看 | 久久久免费av| 亚洲一级高清| 亚洲毛片在线观看.| 免费久久99精品国产自| 欧美一二三区精品| 亚洲一区二区三区激情| 日韩视频欧美视频| 亚洲国产日韩在线一区模特| 国产一区二区福利| 国产欧美日韩精品a在线观看| 欧美精品在线免费播放| 欧美11—12娇小xxxx| 久久乐国产精品| 久久免费视频在线观看| 久久国产99| 欧美亚洲视频在线观看| 亚洲自拍三区| 亚洲尤物视频在线| 亚洲欧美国产三级| 亚洲免费中文| 欧美一区二区在线播放| 亚洲欧美激情四射在线日| 亚洲专区在线视频| 亚洲视频在线免费观看| 亚洲网站视频福利| 亚洲与欧洲av电影| 午夜国产精品视频| 久久国产精品99精品国产| 欧美在线看片a免费观看| 香蕉久久一区二区不卡无毒影院| 亚洲自拍都市欧美小说| 欧美一区二区三区精品电影| 香蕉成人伊视频在线观看| 欧美影院在线| 久久婷婷丁香| 欧美老女人xx| 国产精品久久久久三级| 国产日韩欧美精品一区| 尤物精品国产第一福利三区 | 国产精品欧美激情| 国产精品永久免费观看| 国产亚洲精品久久久| 亚洲第一精品夜夜躁人人躁 | 国产精品国产三级国产aⅴ浪潮 | 久久狠狠亚洲综合| 久久婷婷丁香| 欧美日韩另类国产亚洲欧美一级| 国产精品国产a级| 国产亚洲精久久久久久| 亚洲国产小视频| 亚洲午夜视频在线| 久久久久久久97| 亚洲国产高清一区| 亚洲午夜视频在线观看| 久久久久久亚洲综合影院红桃| 欧美—级a级欧美特级ar全黄| 国产精品播放| 在线播放视频一区| 亚洲一区二区三区四区视频| 久久久久se| 日韩视频免费在线观看| 久久精品免费播放| 欧美日韩精品免费观看视频| 国产日韩专区| 日韩特黄影片| 另类成人小视频在线| 99综合电影在线视频| 久久色在线播放| 国产裸体写真av一区二区| 亚洲精品影视在线观看| 久久精品一区四区| av成人免费在线观看| 久久一区二区三区av| 国产精品亚洲第一区在线暖暖韩国| 亚洲精品日韩在线| 狂野欧美激情性xxxx| 亚洲一区精彩视频| 欧美另类视频|