Mit gcc mehrere Quellen auf einmal kompilieren

ninti

Well-Known Member
Hallo!

Ich habe jetzt echtes Problem mit meinem Buch.
Ich habe was darüber gefunden, aber diese Option finde ich in der Hilfe von gcc nicht.
Deshalb wollte ich euch fragen, wie ich 2 Quellcodedateien zu einem Programm kompilieren kann?
Am besten dann auch für clang.

Und ich habe auch nach einer Suche nichts gefunden.

Gruß
 
Okay, hat sich merkwürdigerweise erledigt. :(
Ich habe einen gcc mit Optionen, die nicht dokumentiert sind ^^

AM BESTEN HIER ALLES LÖSCHEN
DANKE
 
gcc file1.c file2.c -o a.out
wenn in keiner der beiden dateien eine main funktion vorhanden ist
gcc -c file1.c file2.c -o a.out
dann muß man aber noch den Linker mit einem zusätzlichen Objectfile, in dem eine mainfunktion vorhanden ist aufrufen (aber es war ja nur nach compilieren gefragt).
 
Wenn ich doch mal kurz das Thema aufgreifen kann.

Wie mache ich es mit clang, wenn ich schon einen Quellcode kompiliert habe, aber noch eine andere Datei "hinzufügen" will?
Dh. wenn ich z.b. main.c, file1.c , file2.c und file1.h habe und schon file1.c kompiliert habe, mit der -c Option.
Dh. z.b. clang -c file1.c schon vorher gemacht habe, wenn ichs richtig verstanden habe. Ist das dann eigentlich eine Objektdatei?

Ja ich weiß, muss noch das Build-System lernen - ich habs nicht vergessen :)
Ich möchte es gerne nur vollständigkeitshalber wissen.

Hoffe hab mich verständlich ausgedrückt.
 
Na gut ...
Code:
// ------ file hello.h -------
ifndef HELLO
#define HELLO
void hello();
#endif

// ------ file hello.c -------
#include "hello.h"
#include <stdio.h>

void hello(){
   printf("Hello world!\n");
}

// ------ file main.c -------
#include "hello.h"

int main(int argc, char* argv[]){
   hello();
   return 0;
};

> clang -c main.c -std=c99 -O2 -Wall -pedantic -o main.o
> clang -c hello.c -std=c99 -O2 -Wall -pedantic -o hello.o
> clang -std=c99 -O2 -Wall -pedantic -o hello hello.o main.o

> ./hello

Der Compiler kennt die extentions der Dateien, du brauchst also nur nach -o den namen der ausführbaren Datei und der Object-Dateien angeben.
 
Danke dir!
Meine neue Frage :)
Soll/muss ich immer auch -O2 benutzen?
Und benutzt clang standardmäßig -00 ?

Ah und ich wusste nicht, dass der Kompiler auch einfach eine Objektdatei macht, wenn ich einfach .o als Erweiterung mache!
 
Keine Ahnung was der standartmäßig macht, ist auch unwichtig. Du gibst einfach an was du willst. Hier findest du alle weiteren Infos (clang ist bis auf wenige Ausnahmen identisch): https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/ (evtl. andere Version). Wichtig sind für dich die C und C-Family, die Präprozessor und Linker Optionen. Also z.B. die Präkompiler Option -I<dir> damit Headerfiles in anderen Direktories gefunden werden können. Mit -D<definition[=value]> übergibtst du Definitionen. Mit -l<library> kannst du Biblotheken einbinden. So, damit dürftest du ein Stück weiterkommen. Alles weitere mit (g)make, sonst wird es zu kompliziert.
 
Zurück
Oben