1. 程式人生 > >讓cmake顯示gcc/g++的編譯資訊

讓cmake顯示gcc/g++的編譯資訊

專案目錄結構

第一個專案,肯定是大家都懂的“hello world”了。那就先來看一下這個“龐大”的專案結構吧。

1234567[study@leoox hello]$tree.|--CMakeLists.txt|--build`--main.c1directory,2files

哈哈,其實就只有一個程式碼檔案 main.c。原始碼內容嘛,程式設計師都知道。

1 2 3 4 5 6 7 #include <stdio.h> intmain(intargc,char**argv
) { printf("hello world\n"); return0; }

至於CMakeLists.txt嘛,那當然就是今天的主角了。換句話說,以前的Makefile(makefile)已經被CMakeLists.txt取代了。稍後再重點介紹。

還有一個空資料夾build,幹嘛用的呢。它就相當於一個垃圾桶,我們實用cmake的外部構建的方式的時候,編譯過程中產生的一些中間檔案,比如.o檔案,cmake本身的中間檔案等等都會放到build裡面。而我們的原始碼目錄乾乾淨淨,是不是很適合有程式碼潔癖的你呢。

   擼起袖子寫cmake

按照以前,我就得去找其他專案的Makefile過來改,然後湊合的用了。可現在,我可以“驕傲”的說,我可以白手起家搞定CMakeLists.txt。一起見證奇蹟!

123project(hello)cmake_minimum_required(VERSION2.8)add_executable(hello main.c)

哈哈,就是這麼簡單。就3行cmake語法。其實前面2行可以不寫,你只寫一行就可以了。既然寫了,就稍微解釋一下語法吧(太深入,我也不懂)。

     PROJECT(projectname [CXX] [C] [JAVA])

用於指定工程名字,[]為可選內容,預設表示支援所有語言。注意這條指令還隱式定義了另外兩個變數<projectName>_BINARY_DIR 和<projectName>_SOURCE_DIR。我們這裡的project定義為了hello,所以這兩個變數就是${hello_BINARY_DIR} 和 ${hello_SOURCE_DIR}。什麼意思呢,可以用message命令打印出來看看他的值。

${hello_BINARY_DIR} :就是cmake要(構建)編譯我們的專案(main.c)的具體路徑。這裡當然就是build。

${hello_SOURCE_DIR} :就是我們專案的原始碼的具體路徑,這裡當然是專案的根目錄。

如果採用的是內部構建的方式,即直接在專案根目錄下執行cmake,那這兩個變數的值是一樣的。不過一般很少使用這兩個變數。大家都比較喜歡用 ${CMAKE_SOURCE_DIR} 和 ${CMAKE_BINARY_DIR}.

    cmake_minimum_required

這個就比較好理解了,就是這個專案要求的cmake版本不能低於2.8版本。當使用新版本的cmake才有的特性的時候,就需要加上這個了。

   add_executable

顧名思義,就是要生成一個可執行程式hello唄。注意這裡的hello和project裡面的hello是沒有關係的。這裡的hello,是說最終編譯出來的二進位制檔名字叫hello。你可以改成你喜歡的名字。那hello當然是通過main.c來編譯的了。如果有多個.c檔案,一併在後面加入就行。但是如果你深入學習了cmake,其實是不用一個一個手工寫.c檔案的。這裡只有一個main.c就無所謂了。

加上message列印cmake除錯資訊後的cmake如下:

1 2 3 4 5 6 7 project(hello) cmake_minimum_required(VERSION2.8) message(STATUS"src dir = ${hello_SOURCE_DIR}") message(STATUS"binary dir = ${hello_BINARY_DIR}") message(STATUS"leoox src dir = ${CMAKE_SOURCE_DIR}") message(STATUS"leoox binary dir = ${CMAKE_BINARY_DIR}") add_executable(hello main.c)

 愉快的編譯專案吧

執行cmake的方式就是 :

cmake CMakeLists.txt所在的路徑

我們採用外部構建的方式。到build資料夾裡面(cd build)

1234567891011121314151617181920212223[study@leoox build]$cmake..

相關推薦

cmake顯示gcc/g++的編譯資訊

專案目錄結構 第一個專案,肯定是大家都懂的“hello world”了。那就先來看一下這個“龐大”的專案結構吧。 1234567[study@leoox hello]$tree.|--CMakeLists.txt|--build`--main.c1dire

gcc/g++編譯(生動形象,從最容易入手的hello world解釋了庫的概念)

默認 是我 包含 gcc編譯 not found 拷貝 使用 用戶 做了 1. gcc/g++在執行編譯工作的時候,總共需要4步 (1).預處理,生成.i的文件[預處理器cpp] (2).將預處理後的文件不轉換成匯編語言,生成文件.s[編譯器egcs] (3).有匯編變為

學習記錄:gcc/g++ 編譯與鏈接

分析 相互 you get 步驟 後臺開發 四個步驟 targe 生成 gcc/g++ 編譯與鏈接 編譯與鏈接的過程可以分解為四個步驟:預處理、編譯、匯編、鏈接 預處理:源代碼文件和相關的頭文件,被預處理器cpp預處理成一個後綴為 .i 的文件(選項:-E) 編譯:把預

Windows Sublime Text 配置Linux子系統(WSL)下的 gcc/g++ 編譯環境

include 12px 重啟 結果 ctr 檢驗 AC system pat 0. 簡介(若已了解背景可以跳過此部分) Windows 10 Build 14316以上版本中加入了“Windows系統的Linux子系統”(Windows Subsystem for Lin

Linux系統使用入門進階總結(6)——Ubuntu下gcc/g++編譯連結過程

文章轉自: https://blog.csdn.net/VennyJin/article/details/82794331 這裡講的是最簡單的c/c++檔案在linux下編譯連結的過程,後期還可以使用cmake來完成更復雜的工程構建過程。請關注博主的後續文章哈~~~ Ubuntu下gcc

GCC & G++編譯選項

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。 其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。

gcc g++ 編譯 wxwidgets的引數

簡單點: gcc編譯c程式,g++可編譯c和c++程式。 a.可行的命令格式 1.  g++ main.cpp -o c.out $(wx-config --cflags --libs) 2.  g++ $(wx-config --cflags) main.cpp -o a.

[Linux][2015-03-17] gcc/g++ 編譯選項

GCC的幾個常用選項                                gcc常用的編譯選項對程式碼的影響 建立時間:2001-12-21 文章屬性:原創 文章來源:http://xfocus.org/ 文章提交:alert7 (sztcww_at_sina.com) 測試環境 redhat 6

mac下使用vim gcc/g++ 編譯cpp(c++)檔案並執行

首先確認gcc和g++版本,二者是否一致 命令:gcc -v;g++ -v 然後vim 編寫c++檔案,比如:#include <iostream>..... 最後儲存的時候要注意,exit+:sav+cppname.cpp “.cpp”字尾保證編譯器識別是c+

gcc/g++ 編譯引數

1, -E(大寫),預處理 例子:gcc -E test.cpp -o test.i 預處理,把程式裡的#開頭的替換掉,比如#include,然後生成test.i 2,-P(大寫),去掉預處理生成的雜亂資訊 -E後生成的檔案裡面有很多雜亂的資訊,用-P可以去掉雜亂的資訊。 3,

Ubuntu下 gcc/g++ 編譯 template, 出現 call of overload " ..." is ambigous錯誤

Ubuntu下 gcc/g++ 編譯 template, 出現 call of overload ” …” is ambigous錯誤 練習Essential C++ 第二章練習題2.6時出現如題 的問題。 問題描述 #include<i

linux gcc g++編譯命令選項

編譯:  [[email protected] code]# g++-o test.o d.cpp out.cpp [[email protected] code]# ./test.o1231 [[email protected] code]#  編譯成靜態庫  [[email&

GCC/G++編譯原理分析

一、概述 C和C++編譯器是整合的,編譯一般分為四個步驟: 預處理(preprocessing)編譯(compilation)彙編(assembly)連線(linking) gcc   認為預處理的檔案是(.i)是C檔案,並且設定C形式的連線; g++   認為預

MinGW下載並配置gcc/g++編譯環境

本文將講解如何下載MinGW並配置gcc\g++編譯環境 #方案一:官網下載 ##一、下載MinGW 在MinGW官網中下載“mingw-get-setup.exe” 如果您下載的過程非常艱難,

windows(8) 下在GVIM中使用gcc/g++編譯除錯c/cpp檔案

1. 首先下載安裝MinGW,下載地址: http://sourceforge.net/projects/mingw/。這個是邊下載邊安裝的,下載完成即安裝完成。我的安裝目錄為D:\MinGW; 2. 設定系統環境變數。右擊Computer -> Properties

如何獲得gcc/g++編譯巨集定義和標頭檔案搜尋目錄的方法說明

/* co-gcc.lnt: This is the seed file for configuring Lint for use with GCC versions 2.95.3 and later. Like all compiler options files thi

如何網頁顯示友好的錯誤資訊頁面

大多數使用者看到”該頁無法顯示”,”伺服器內部錯誤”等預設錯誤提示資訊會立馬關閉瀏覽器視窗,我們為什麼不能自定義一下呢?讓使用者從錯誤資訊中得到真正的幫助? 錯誤資訊的頁面應該做到以下幾點:      1.給普通訪客友好提示。告訴他們這是怎麼了,簡單,再簡

gcc/g++/make 編譯資訊帶顏色輸出

如果編譯一個專案錯誤警告太多,非常不好找,所以非常希望輸出資訊可以帶有顏色。 可是 gcc 4.9.0 之前的版本並不支援,很多情況下是不能替換編譯器的,比如使用交叉編譯器, 也可以使用 colorgcc,但我覺得不是特別好,需要配置,如果使用Makefile還要更改編譯器設定,

gcc g++支持C++11 標準編譯及其區別

包含 別名 glob sin 你會 con 並且 c++程序 轉換成 g++ -g -Wall -std=c++11 main.cpp gcc -g -Wall -std=c11 main.cpp 如果不想每次寫這個-std=C++11這個選項該怎麽辦呢?   方法出

gcc/g++以c++11編譯

pragma exp .cpp erro expect span 類定義 cte before 方法一: //在程序頭加上預定義編譯器命令 #pragma GCC diagnostic error "-std=c++11" //通過#pragma 指示 GCC編譯器處理錯誤