Недавно мне пришлось использовать эту команду в make-файле, который я использовал для программы sqlite, над которой я работаю:
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 (включенный в файл main.cpp вместе с #include SQL / sqlite3.h). Но почему я должен был использовать gcc для этого и создать sqlite3.o, а затем скомпилировать оба файла как файлы .o в мой исполняемый файл?
Редактировать: Я думаю, что файлы .o могут быть скомпилированы как gcc, так и g ++, если это так, будет ли хорошей практикой всегда всегда компилировать вещи как файлы .o?
Но почему я должен был использовать gcc для этого и создать sqlite3.o, а затем скомпилировать оба файла как файлы .o в мой исполняемый файл?
Ты не необходимость сделать это. Причина, по которой вы сделал сделать это, чтобы указать, что sqlite.c был С код, а не C ++ код. Вы могли бы сделать это вместо этого:
g++ main.cpp -x c sqlite3.c -o sqliteex
Кроме того, возможно (но совсем не обязательно), что код sqlite мог быть скомпилирован как C ++, например так:
g++ main.cpp sqlite3.c -o sqliteex
Цитата из Википедии:
Single Compilation Unit — это метод компьютерного программирования для языков C / C ++, который сокращает время компиляции и помогает компилятору оптимизировать программу, даже если самому компилятору не хватает поддержки для оптимизации всей программы или предварительно скомпилированных заголовков.
http://en.wikipedia.org/wiki/Single_Compilation_Unit
Разработка в основном редактировать-> компилировать до цикла успеха. Если у вас есть отдельно скомпилированные файлы, вы можете просто перекомпилировать только файл, который был изменен, что делает перестройку намного быстрее. Последняя строка — это не компиляция, а компоновка скомпилированных объектных файлов в целевой исполняемый файл.
Также, как отметил Mysticial, у вас есть смесь C и C ++