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

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

CMake的使用

轉(zhuǎn)載自:http://blog.csdn.net/netnote/archive/2009/04/06/4051620.aspx

一、      基本使用

安裝:下載二進(jìn)制包后可直接解壓使用

從源碼安裝則執(zhí)行命令:./bootstrap; make; make install——嘗試執(zhí)行bootstrap失敗

使用:cmake dir_path,生成工程文件或makefile文件

二、      概念

out-of-source build,與in-source build相對(duì),即將編譯輸出文件與源文件放到不同目錄中;

三、      基本結(jié)構(gòu)

1,依賴CMakeLists.txt文件,項(xiàng)目主目標(biāo)一個(gè),主目錄中可指定包含的子目錄;

2,在項(xiàng)目CMakeLists.txt中使用project指定項(xiàng)目名稱,add_subdirectory添加子目錄

3,子目錄CMakeLists.txt將從父目錄CMakeLists.txt繼承設(shè)置(TBD,待檢驗(yàn))

四、      語法

1.       #注釋

2.       變量:使用set命令顯式定義及賦值,在非if語句中,使用${}引用,if中直接使用變量名引用;后續(xù)的set命令會(huì)清理變量原來的值;

3.       command (args ...)  #命令不分大小寫,參數(shù)使用空格分隔,使用雙引號(hào)引起參數(shù)中空格

4.       set(var a;b;c) <=> set(var a b c)  #定義變量var并賦值為a;b;c這樣一個(gè)string list

5.       Add_executable(${var}) <=> Add_executable(a b c)   #變量使用${xxx}引用

6.       條件語句:

if(var) #var empty 0 N No OFF FALSE... #非運(yùn)算使用NOT

       

else()/elseif() … endif(var)

7.       循環(huán)語句

Set(VAR a b c)

Foreach(f ${VAR})       …Endforeach(f)

8.       循環(huán)語句

WHILE() … ENDWHILE()

五、      內(nèi)部變量

CMAKE_C_COMPILER:指定C編譯器

CMAKE_CXX_COMPILER

CMAKE_C_FLAGS:編譯C文件時(shí)的選項(xiàng),如-g;也可以通過add_definitions添加編譯選項(xiàng)

EXECUTABLE_OUTPUT_PATH:可執(zhí)行文件的存放路徑

LIBRARY_OUTPUT_PATH:庫文件路徑

CMAKE_BUILD_TYPE:build 類型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBSSwitch between shared and static libraries

內(nèi)置變量的使用:

>> CMakeLists.txt中指定,使用set

>> cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF

六、      命令

project (HELLO)   #指定項(xiàng)目名稱,生成的VC項(xiàng)目的名稱;

>>使用${HELLO_SOURCE_DIR}表示項(xiàng)目根目錄

include_directories:指定頭文件的搜索路徑,相當(dāng)于指定gcc-I參數(shù)

>> include_directories (${HELLO_SOURCE_DIR}/Hello)  #增加Helloinclude目錄

link_directories:動(dòng)態(tài)鏈接庫或靜態(tài)鏈接庫的搜索路徑,相當(dāng)于gcc-L參數(shù)

       >> link_directories (${HELLO_BINARY_DIR}/Hello)     #增加Hellolink目錄

add_subdirectory:包含子目錄

       >> add_subdirectory (Hello)

add_executable:編譯可執(zhí)行程序,指定編譯,好像也可以添加.o文件

       >> add_executable (helloDemo demo.cxx demo_b.cxx)   #cxx編譯成可執(zhí)行文件——

add_definitions:添加編譯參數(shù)

>> add_definitions(-DDEBUG)將在gcc命令行添加DEBUG宏定義;

>> add_definitions( “-Wall -ansi –pedantic –g”)

target_link_libraries:添加鏈接庫,相同于指定-l參數(shù)

>> target_link_libraries(demo Hello) #將可執(zhí)行文件與Hello連接成最終文件demo

add_library:

>> add_library(Hello hello.cxx)  #hello.cxx編譯成靜態(tài)庫如libHello.a

add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....

link_libraries( lib1 lib2 ...): All targets link with the same set of libs

七、      說明

1,CMAKE生成的makefile能夠處理好.h文件更改時(shí)只編譯需要的cpp文件;

八、      FAQ

1)  怎樣獲得一個(gè)目錄下的所有源文件

>> aux_source_directory(<dir> <variable>)

>> dir中所有源文件(不包括頭文件)保存到變量variable中,然后可以add_executable (ss7gw ${variable})這樣使用。

2)  怎樣指定項(xiàng)目編譯目標(biāo)

>>  project命令指定

3)  怎樣添加動(dòng)態(tài)庫和靜態(tài)庫

>> target_link_libraries命令添加即可

4)  怎樣在執(zhí)行CMAKE時(shí)打印消息

>> message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

>> 注意大小寫

5)  怎樣指定頭文件與庫文件路徑

>> include_directorieslink_directories

>>可以多次調(diào)用以設(shè)置多個(gè)路徑

>> link_directories僅對(duì)其后面的targets起作用

6)  怎樣區(qū)分debugrelease版本

>>建立debug/release兩目錄,分別在其中執(zhí)行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要編譯不同版本時(shí)進(jìn)入不同目錄執(zhí)行make即可;

Debug版會(huì)使用參數(shù)-g;Release版使用-O3 –DNDEBUG

>> 另一種設(shè)置方法——例如DEBUG版設(shè)置編譯參數(shù)DDEBUG

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

在執(zhí)行cmake時(shí)增加參數(shù)即可,例如cmake -D DEBUG_mode=ON

7)  怎樣設(shè)置條件編譯

例如debug版設(shè)置編譯選項(xiàng)DEBUG,并且更改不應(yīng)改變CMakelist.txt

>> 使用option commandeg

option(DEBUG_mode "ON for debug or OFF for release" ON)

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

>> 使其生效的方法:首先cmake生成makefile,然后make edit_cache編輯編譯選項(xiàng);Linux下會(huì)打開一個(gè)文本框,可以更改,該完后再make生成目標(biāo)文件——emacs不支持make edit_cache

>> 局限:這種方法不能直接設(shè)置生成的makefile,而是必須使用命令在make前設(shè)置參數(shù);對(duì)于debug、release版本,相當(dāng)于需要兩個(gè)目錄,分別先cmake一次,然后分別make edit_cache一次;

>> 期望的效果:在執(zhí)行cmake時(shí)直接通過參數(shù)指定一個(gè)開關(guān)項(xiàng),生成相應(yīng)的makefile——可以這樣做,例如cmake –DDEBUGVERSION=ON

8)  怎樣添加編譯宏定義

>> 使用add_definitions命令,見命令部分說明

9)  怎樣添加編譯依賴項(xiàng)

用于確保編譯目標(biāo)項(xiàng)目前依賴項(xiàng)必須先構(gòu)建好

>>add_dependencies

10)        怎樣指定目標(biāo)文件目錄

>> 建立一個(gè)新的目錄,在該目錄中執(zhí)行cmake生成Makefile文件,這樣編譯結(jié)果會(huì)保存在該目錄——類似

>> SET_TARGET_PROPERTIES(ss7gw PROPERTIES

                      RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}")

11)        很多文件夾,難道需要把每個(gè)文件夾編譯成一個(gè)庫文件?

>> 可以不在子目錄中使用CMakeList.txt,直接在上層目錄中指定子目錄

12)        怎樣設(shè)定依賴的cmake版本

>>cmake_minimum_required(VERSION 2.6)

13)        相對(duì)路徑怎么指定

>> ${projectname_SOURCE_DIR}表示根源文件目錄,${ projectname _BINARY_DIR}表示根二進(jìn)制文件目錄?

14)        怎樣設(shè)置編譯中間文件的目錄

>> TBD

15)        怎樣在IF語句中使用字串或數(shù)字比較

>>數(shù)字比較LESS、GREATER、EQUAL,字串比STRLESS、STRGREATER、STREQUAL

>> Eg

set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

set(AAA abc)

IF(AAA STREQUAL abc)

    message(STATUS "true")   #應(yīng)該打印true

ENDIF()

16)        更改h文件時(shí)是否只編譯必須的cpp文件

>> 

17)        機(jī)器上安裝了VC7VC8,CMAKE會(huì)自動(dòng)搜索編譯器,但是怎樣指定某個(gè)版本?

>> TBD

18)        怎樣根據(jù)OS指定編譯選項(xiàng)

>> IF( APPLE ); IF( UNIX ); IF( WIN32 )

19)        能否自動(dòng)執(zhí)行某些編譯前、后命令?

>> 可以,TBD

20)        怎樣打印make的輸出

make VERBOSE=1

參考文獻(xiàn):

[1] CMake_Tutorial.pdf

[2] CMake使用總結(jié),http://blog.csdn.net/keensword007/archive/2008/07/16/2663235.aspx

[3] http://www.cmake.org/

[4] 安裝包中文檔

[5] Andrej CedilnikHOWTO: Cross-Platform Software Development Using CMakeOctober, 2003

[6] Cjacker,CMake實(shí)踐.PDF


posted on 2010-08-19 19:48 楊粼波 閱讀(40192) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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成人免费无遮挡大片| 亚洲一级黄色片| 久久av红桃一区二区小说| 免费亚洲一区二区| 国产精品免费观看视频| 亚洲国产专区校园欧美| 亚洲欧美国产精品va在线观看| 久久久欧美一区二区| 亚洲全部视频| 欧美一区二区视频网站| 欧美另类69精品久久久久9999| 国产精品永久在线| 日韩一级黄色大片| 久久五月天婷婷| 在线亚洲激情| 免费在线视频一区| 国产一区二区三区四区hd| 日韩午夜在线播放| 久久网站免费| 亚洲一区影院| 欧美国产日韩视频| 在线观看91精品国产入口| 亚洲欧美日韩精品综合在线观看| 欧美激情二区三区| 久久成人一区二区| 国产精品美女主播| 一区二区福利| 欧美国产日韩在线观看| 欧美中文在线观看| 国产精品网红福利| 一区二区三区日韩| 亚洲电影免费观看高清完整版在线| 欧美一级专区| 国产精品视频不卡| 亚洲一区影音先锋| 亚洲精品视频免费在线观看| 久久婷婷麻豆| 激情一区二区三区| 欧美一区二区播放| 一本久久a久久免费精品不卡| 欧美成人国产| 最新国产成人在线观看| 免费看亚洲片| 久久久久久国产精品mv| 国产亚洲精品久久久久婷婷瑜伽 | 久久天天躁狠狠躁夜夜爽蜜月| 国产精品一区二区三区免费观看| 在线天堂一区av电影| 最新中文字幕亚洲| 欧美成人dvd在线视频| 亚洲国产高清在线| 男女av一区三区二区色多| 欧美一区在线看| 国产一级久久| 久久久无码精品亚洲日韩按摩| 亚洲欧美视频一区| 国产精品夜夜嗨| 欧美一区二区三区喷汁尤物| 亚洲一区日韩在线| 国产精品一区二区欧美| 西瓜成人精品人成网站| 亚洲自拍高清| 国产日韩在线视频| 久久久久国产一区二区三区四区 | 久久久噜噜噜久久| 在线观看视频亚洲| 欧美国产日韩一区二区在线观看| 久久综合九色九九| 亚洲国产精品传媒在线观看| 亚洲第一福利社区| 欧美激情aⅴ一区二区三区| 亚洲免费成人| 一区二区av在线| 国产精品美女久久久浪潮软件| 欧美一级久久久久久久大片| 先锋亚洲精品| 狠狠色2019综合网| 亚洲第一区色| 欧美日韩国产区| 亚洲女爱视频在线| 午夜久久资源| 亚洲国产福利在线| 亚洲欧洲久久| 国产精品久久夜| 久久久久欧美| 欧美chengren| 亚洲在线国产日韩欧美| 午夜欧美电影在线观看| 伊人久久亚洲热| 亚洲日本免费电影| 国产精品影视天天线| 欧美aaa级| 欧美日韩在线一区二区| 久久精品国产2020观看福利| 老司机凹凸av亚洲导航| 亚洲无玛一区| 欧美在线观看视频在线 | 99re视频这里只有精品| 亚洲一区在线看| 影视先锋久久| 日韩系列在线| 国产综合精品一区| 亚洲三级免费观看| 国产精品久久久久久久浪潮网站 | 亚洲国产中文字幕在线观看| 国产精品地址| 免费影视亚洲| 欧美系列精品| 免费成人毛片| 国产精品嫩草久久久久| 欧美成人午夜剧场免费观看| 欧美深夜福利| 美乳少妇欧美精品| 欧美午夜片在线免费观看| 久久裸体视频| 欧美日韩高清在线| 久热爱精品视频线路一| 欧美日韩综合一区| 欧美1区视频| 国产老肥熟一区二区三区| 亚洲国产婷婷| 国产一区二区三区的电影| 日韩视频免费观看| 伊人婷婷欧美激情| 亚洲一区免费| 日韩亚洲欧美一区二区三区| 欧美制服丝袜| 亚洲欧美日韩区| 欧美国产精品v| 久久噜噜噜精品国产亚洲综合| 欧美日韩在线视频观看| 欧美国产日本| 国产亚洲精品久久久久久| 亚洲精品欧洲精品| 亚洲第一精品久久忘忧草社区| 亚洲欧美日韩综合一区| 亚洲视频在线观看免费| 免费在线成人av| 久久资源av| 国产欧美一区二区精品秋霞影院| 99精品久久久| 亚洲精选大片| 免费成人av在线| 久久亚洲精品一区二区| 国产老女人精品毛片久久| 99在线|亚洲一区二区| 亚洲精品乱码久久久久久按摩观| 久久精品人人做人人综合| 性做久久久久久久久| 欧美视频一区二区在线观看 | 国产精品美女久久久久久2018| 亚洲欧洲日产国产综合网| 亚洲国产精品悠悠久久琪琪| 久久精品国产亚洲一区二区三区 | 久久久www成人免费毛片麻豆| 欧美一区=区| 国产精品久久久久久妇女6080 | 国产精品色婷婷| 一区二区黄色| 亚洲性感激情| 欧美日韩亚洲免费| 亚洲美女淫视频| 日韩亚洲视频在线| 欧美久久九九| 亚洲精品乱码| 一本色道综合亚洲| 欧美日韩免费| 一区二区三区欧美视频| 亚洲深夜福利在线| 欧美午夜免费电影| 一区二区三区 在线观看视频| 亚洲素人在线| 国产精品久久99| 亚洲自拍偷拍色片视频| 亚洲欧美日本另类| 国产精品夜色7777狼人| 午夜精品久久久久久久蜜桃app| 欧美一区二区高清| 国产啪精品视频| 欧美呦呦网站| 美女脱光内衣内裤视频久久网站| 在线欧美亚洲| 欧美黄色网络| 99精品福利视频| 性一交一乱一区二区洋洋av| 国产视频精品免费播放| 久久精品国产视频| 欧美福利视频在线| 99这里只有久久精品视频| 欧美特黄视频| 香蕉久久一区二区不卡无毒影院| 久久久久久香蕉网| 亚洲国产天堂久久国产91| 欧美精品久久99久久在免费线| 99亚洲精品| 久久久久亚洲综合| 亚洲欧洲日本在线| 欧美四级在线观看| 欧美一区2区视频在线观看 |