久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    CMake編譯linux C++

     紫火神兵 2014-12-04

    CMake是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CmakeLists.txt。Cmake 并不直接建構出最終的軟件,而是產生標準的建構檔(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標準的方式建構他的軟件,這種可以使用各平臺的原生建構系統的能力是 CMake 和 SCons 等其他類似系統的區別之處。

      CMake 可以編譯源代碼、制作程式庫、產生適配器(wrapper)、還可以用任意的順序建構執行檔。CMake 支援 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄里),因此可以很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支援靜態與動態程式庫的建構。

      “CMake”這個名字是“cross platform make”的縮寫。雖然名字中含有“make”,但是CMake和Unix上常見的“make”系統是分開的,而且更為高階。

     

    [cmake 命令]
    cmake .
    make
    make clean

    重新編譯,需要刪除cmake的遺留文件
    推薦編寫shell腳本處理這點簡單但是將會伴隨著你無數次的事情

    [clear cmake file shell]

    echo "rm cmake cache begin..."
    rm ./cmake_install.cmake
    rm -r ./CMakeFiles
    rm ./Makefile
    rm ./CMakeCache.txt
    echo "rm cmake cache end..."

    [內部編譯]

    //CMakeLists.txt文件內容如下:
    PROJECT (HELLO)      //工程名HELLO
    SET(SRC_LIST main.c) //顯示定義變量,并賦值
    MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
    MESSAGE(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})
    ADD_EXECUTABLE(hello ${SRC_LIST})
    PROJECT指令的語法是:
    PROJECT(projectname [CXX] [C] [Java])

    SET(SRC_LIST main.c),如果有多個源文件,也可以定義成:SET(SRC_LIST main.c t1.c t2.c)。
    MESSAGE指令的語法是:
    MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"
    ...)
    這個指令用于向終端輸出用戶定義的信息,包含了三種類型:
    SEND_ERROR,產生錯誤,生成過程被跳過。
    SATUS,輸出前綴為—的信息。
    FATAL_ERROR,立即終止所有cmake過程.

    HELLO_BINARY_DIR和HELLO_SOURCE_DIR是兩個隱式變量

    make clean即可對構建結果進行清理

    [外部編譯]

    構建
    1,為工程添加一個子目錄src,用來放置工程源代碼;
    2,添加一個子目錄doc,用來放置這個工程的文檔hello.txt
    3,在工程目錄添加文本文件COPYRIGHT, README;
    4,在工程目錄添加一個runhello.sh腳本,用來調用hello二進制
    4,將構建后的目標文件放入構建目錄的bin子目錄;
    5,最終安裝這些文件:將hello二進制與runhello.sh安裝至/usr/bin,將doc目錄的內容以及
    COPYRIGHT/README安裝到/usr/share/doc/cmake/t2


    ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})就可以構建一個libhello_static.a的靜態庫了。


    [CMakeList 例子]

    PROJECT(PRONAME)  //工程名

    SET(CMAKE_C_COMPILER "g++")  //選擇編譯器,默認是gcc

    AUX_SOURCE_DIRECTORY(./ SRC_LIST) //添加源碼目錄
    SET(EXECUTABLE_OUTPUT_PATH ../bin) //添加bin文件生成路徑

    ADD_DEFINITIONS(-g -W -Wall -DTIXML_USE_STL)
    //ADD_DEFINITIONS添加一些宏,根據自己的程序需要

    //添加頭文件路徑
    INCLUDE_DIRECTORIES(
    ./
    /home/hfx/src
    )

    //添加鏈接庫路徑
    LINK_DIRECTORIES(
    /usr/local/mysql/lib/mysql
    )

    //生成二進制文件
    ADD_EXECUTABLE(helloworld ${SRC_LIST})
    //生成LIB
    ADD_LIBRARY(helloworld2 ${SRC_LIST})

    //鏈接庫
    TARGET_LINK_LIBRARIES(mysqlclient_r)

    //代碼位置無關宏  -fPIC
    位置無關代碼段的優點:
    1.簡化設計,方便實現系統的快速引導。位置無關代碼可以避免在引導時進行地址映射,并方便地跳轉到RAM中實現快速引導
    2.實現復位處理智能化。位置無關的代碼可以被加載到任意地址空間運行
    3.便于調試。Bootloader的調試通常也是一個繁瑣的過程,使用位置無關代碼,則可以將映像文件加載到RAM中進行調試,
    這既能真實地反映程序從ROM中  進行系統引導的情況,又可以避免頻繁燒寫程序存儲器。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 中文字幕乱码一区二区免费| 日本精品人妻无码77777| 久久久久高潮综合影院| 乱公和我做爽死我视频| 成人久久免费网站| 午夜射精日本三级| 亚洲免费成人av一区| 99在线精品国自产拍中文字幕| 人妻少妇久久久久久97人妻| 国产精品一区二区中文| 国产精品爆乳在线播放第一人称| 内射口爆少妇麻豆| 亚洲国产午夜精品理论片妓女| 好大好深好猛好爽视频| 国产精品一亚洲AV日韩AV欧 | 国自产偷精品不卡在线| 精品国偷自产在线视频99| 九九在线精品国产| 久久经精品久久精品免费观看| 国产精品免费看久久久| 亚洲色大成成人网站久久| 一本色道久久综合亚洲精品 | 国产青榴视频在线观看| 亚洲性无码AV在线欣赏网| 久久精品国产99国产精品严洲| 精品一区二区三区无码视频| 日韩女同在线二区三区| 97久久天天综合色天天综合色HD| 免费无码AV一区二区波多野结衣| 国产精品美女久久久久| 亚洲香蕉网久久综合影视| 四虎亚洲精品无码| 蜜芽久久人人超碰爱香蕉| 亚洲中文字幕久久精品无码喷水 | 国产对白熟女受不了了| 狠狠人妻久久久久久综合| 亚洲欧美综合精品二区| 中文字幕无码av不卡一区| 国内自拍视频一区二区三区| 无码日韩做暖暖大全免费不卡| 国产人妇三级视频在线观看|