讓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 |
至於CMakeLists.txt嘛,那當然就是今天的主角了。換句話說,以前的Makefile(makefile)已經被CMakeLists.txt取代了。稍後再重點介紹。
還有一個空資料夾build,幹嘛用的呢。它就相當於一個垃圾桶,我們實用cmake的外部構建的方式的時候,編譯過程中產生的一些中間檔案,比如.o檔案,cmake本身的中間檔案等等都會放到build裡面。而我們的原始碼目錄乾乾淨淨,是不是很適合有程式碼潔癖的你呢。
擼起袖子寫cmake
按照以前,我就得去找其他專案的Makefile過來改,然後湊合的用了。可現在,我可以“驕傲”的說,我可以白手起家搞定CMakeLists.txt。一起見證奇蹟!
123 | project(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編譯器處理錯誤 |