GCC編程入門步驟

更多內容:
參考:https://github.com/TheErk/CMake-tutorial

初步

#include <stdlib.h>
#include <stdio.h>
void main(void)
{
printf("hello world!\r\n");
}
gcc hello.c -o hello.exe

分步:

ubuntu@ubuntu:~/Desktop/helloworldC$ ls
hello.c  

ubuntu@ubuntu:~/Desktop/helloworldC$ gcc -E hello.c -o hello.i
ubuntu@ubuntu:~/Desktop/helloworldC$ ls
hello.c   hello.i

ubuntu@ubuntu:~/Desktop/helloworldC$ gcc -S hello.i -o hello.s


ubuntu@ubuntu:~/Desktop/helloworldC$ gcc -c hello.s -o hello.o
ubuntu@ubuntu:~/Desktop/helloworldC$ ls
hello.c   hello.i  hello.o  hello.s

ubuntu@ubuntu:~/Desktop/helloworldC$ gcc hello.o -o hello.exe
ubuntu@ubuntu:~/Desktop/helloworldC$ ./hello.exe
hello world!

參考:https://blog.csdn.net/weixin_33937778/article/details/92983969

使用 cmake

在歷史上工程師們曾使用 makefile 進行自動編譯,但下面要談的 cmake 比它更加方 便。並且,我們會看到後面提到的大多數庫都使用 cmake 來管理源代碼。

cmake命令
make命令
cmake 工程
生成makefile 文件
編譯

舉例: cmake 來製作一個工程

1、 建立CMakeLists.txt 文件

  • 遵守 cmake 的語法
  • 只有帶有 main 函數 的文件纔會生成可執行程序
  • 而另一些代碼,打包供其他程 序調用,叫做庫
# 把工程調爲 Debug 編譯模式
set( CMAKE_BUILD_TYPE "Debug" )

# 聲明要求的 cmake 最低版本 
cmake_minimum_required( VERSION 2.8 ) 

# 聲明一個 cmake 工程 
project( HelloSLAM )

# 添加一個可執行程序 
# 語法:add_executable( 程序名 源代碼文件 )
add_executable( helloSLAM helloSLAM.cpp )

2、build臨時目錄存放中間文件
新建了一箇中間文件夾“build”,然後進入 build 文件夾,通過 cmake ..命令

 mkdir build 
 cd build

3、cmake 會輸出 MakeFile。cmake 過程處理了工程 文件之間的關係
( MakeFile是一個自動化編譯的腳本,可以將它理解成一系統自動生成的編譯指令,而無須理會其 內容)。

 cmake ..

4、 用 make 命令,make 過程實際調用了 g++ 來編譯程序

make

得到在 CMakeLists.txt 聲明 的那個可執行程序 hello 。

5、執行它:

./hello

6、用 cmake-make 的做法對項目的編譯管理工作,只需要維護若干個比較直觀的 CMakeLists.txt 文件
比如, 當 新增一個文件時,只需在 CMakeLists.txt 中添加一行“ add_XXX( 程序名 源代碼文件 ) ”命 令

cmake 生成庫

  • OpenCV 庫提供了許多計算機視覺相關的算法
  • Eigen 庫提供了矩陣代數的計算
    1、文件
//這是一個庫文件 
#include <iostream>
using namespace std;
void printHello() 
 { 
 cout<<"Hello"<<endl; 
 }

2、CMakeList.txt
新增一個可執行文件時, add_executable( helloRun hello.cpp )
添加靜態庫, add_library( hello MylibHello.cpp )
添加共享庫, add_library( hello_shared SHARED MylibHello.cpp )

cd build 
cmake .. 
make

在 build 文件夾中會生成一個 libhello.a 文件,libhello_shared.so 文件,這就是得到的庫

在 Linux 中,庫文件分成靜態庫(以.a 作爲後綴名)和共享庫(.so )兩種。靜態庫每次被調用都會生成一個副本, 而共享庫則只有一個副本。

3、.h頭文件

#ifndef LIBHELLO_H_ 
#define LIBHELLO_H_ 
void printHello(); 
#endif

4.1 、CMakeList 鏈接

add_executable( useHello useHello.cpp ) 
target_link_libraries( useHello hello_shared )

通過這兩句話,useHello 程序就能順利使用 hello_shared 庫中的代碼了

4.2 主函數調用

#include "libHello.h" 
int main( int argc, char** argv ) 
{ 
printHello(); 
return 0; 
 }

IDE

MinGW + gmake + Notepad++

windows下的gcc有兩個版本mingw和cygwin,二選一就好
已學會C++,做工程,建議用mingw

用cygwin編譯後的二進制碼在別人機器上用不了,因爲其他人的機器沒有cygwin1.dll(安裝cygwin的時候會安裝,提供POSIX api和windows api之間的函數轉換)

學習C++,建議用cygwin

cygwin完整模擬了linux的運行環境,包括終端、bash、gcc、gdb、make等等,是一套完整的解決方案(mingw還需要自己配置最小linux環境,msys)

安裝過程:https://blog.csdn.net/u012450329/article/details/53813477

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章