Причина необходимости компилировать файлы с различными типами расширений

Недавно мне пришлось использовать эту команду в 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?

1

Решение

Но почему я должен был использовать 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
3

Другие решения

Цитата из Википедии:

Single Compilation Unit — это метод компьютерного программирования для языков C / C ++, который сокращает время компиляции и помогает компилятору оптимизировать программу, даже если самому компилятору не хватает поддержки для оптимизации всей программы или предварительно скомпилированных заголовков.

http://en.wikipedia.org/wiki/Single_Compilation_Unit

Разработка в основном редактировать-> компилировать до цикла успеха. Если у вас есть отдельно скомпилированные файлы, вы можете просто перекомпилировать только файл, который был изменен, что делает перестройку намного быстрее. Последняя строка — это не компиляция, а компоновка скомпилированных объектных файлов в целевой исполняемый файл.

Также, как отметил Mysticial, у вас есть смесь C и C ++

0

По вопросам рекламы [email protected]