久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

CMAKE的使用

 londonKu 2012-05-07

一,、      基本使用

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

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

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

二,、      概念

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

三,、      基本結(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命令會清理變量原來的值,;

3.       command (args ...)  #命令不分大小寫,,參數(shù)使用空格分隔,使用雙引號引起參數(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僅對其后面的targets起作用

6)  怎樣區(qū)分debug,、release版本

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

Debug版會使用參數(shù)-gRelease版使用-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下會打開一個(gè)文本框,可以更改,,該完后再make生成目標(biāo)文件——emacs不支持make edit_cache,;

>> 局限:這種方法不能直接設(shè)置生成的makefile,而是必須使用命令在make前設(shè)置參數(shù),;對于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é)果會保存在該目錄——類似

>> 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)        相對路徑怎么指定

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

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

>> TBD

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

>>數(shù)字比較LESS,、GREATEREQUAL,,字串比STRLESS,、STRGREATERSTREQUAL,,

>> 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會自動(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./

[4] 安裝包中文檔

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

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

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多