最近我不得不在我正在使用的sqlite程序的makefile中使用此命令:
gcc -g -c sqlite3.c -o sqlite3.o
g++ -g -c main.cpp -o main.o
g++ sqlite3.o main.o -o sqliteex
我必须直接将sqlite3.c文件编译到我的程序中才能使用sqlite3.h接口(使用#include SQL / sqlite3.h包含在main.cpp文件中)。但为什么我需要使用gcc来执行此操作并创建sqlite3.o,然后将这两个文件作为.o文件编译到我的可执行文件中?
编辑:我的猜测是.o文件可以通过gcc和g ++编译,如果是这样的话,那么总是将事物编译为.o文件是一个好习惯吗?
答案 0 :(得分:3)
但为什么我需要使用gcc来执行此操作并创建sqlite3.o,然后将这两个文件作为.o文件编译到我的可执行文件中?
你没有需要来做到这一点。 这样做的原因是指定sqlite.c是 C 代码而不是 C ++ 代码。你可以这样做:
g++ main.cpp -x c sqlite3.c -o sqliteex
此外,有可能(但不是完全可以)sqlite代码可以编译为C ++,如下所示:
g++ main.cpp sqlite3.c -o sqliteex
答案 1 :(得分:0)
来自维基百科的引用:
单一编译单元是一种用于C / C ++语言的计算机编程技术,它可以减少编译时间并帮助编译器执行程序优化,即使编译器本身缺乏对整个程序优化或预编译头文件的支持。
http://en.wikipedia.org/wiki/Single_Compilation_Unit
开发主要是编辑 - >编译直到成功周期。当您单独编译文件时,您只能重新编译已修改的文件,这使重建速度更快。最后一行不是编译,而是将编译的目标文件链接到目标可执行文件。
同样,Mysticial指出,你有C和C ++的混合