Mit makefile-Variablen in C
Ich brauche zum Lesen eine Datei in einem C-Programm und ich möchte nicht zu fest den Pfad zu dieser Datei. Ich möchte, dass der Pfad als variable, und verwenden Sie dann in C-prog.
file name is xyz.txt and I want to do something like this in C prog:
fopen ("PATH/xyz.txt", "r");
here PATH is specified in make command that compiles this file.
Wie kann ich das tun?
- Einstellung
PATH
zur compile-Zeit über einen machen, ist nicht anders als hart zu codieren; es ist noch nicht vordefiniert ist, in die ausführbare Datei. Du bist besser dran, nur müssen es akzeptieren, ein command-line-parameter oder Lesen aus einer Umgebungsvariablen zur Laufzeit. - Ich glaube, es ist besser, als hart zu codieren. Der Speicherort der Datei unterscheidet sich mit der Verbraucher von diesem Programm. Also brauche ich einen Weg, so dass ich nicht brauchen, um zu ändern/ändern Sie die Benutzeroberfläche des Programms. Zum Beispiel, für consumer1 - seine makefile setzt PATH = /a/b/c und für comsumer2 - seine makefile setzt PATH = /d/e/f/
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich sollte mit einer Befehl Linie parameter aber, wenn es sein muss in der makefile, können Sie die folgenden verwenden:
Den
-D
gibt eine compile-time#define
setztMYSTRING
zu"hello"
.Dann, wenn Sie
MYSTRING
im code, es drehte sich in der Zeichenfolge. In dem Beispiel code, ich pass einfach auf, es zuprintf
aber Sie könnte ebenso gut weitergebenfopen
wie pro Ihre Anforderung.Wenn Sie ausführen, dass ausführbare Datei, die Ausgabe ist:
Dies ist etwas anders, um einfach nur hart codierte Wert in die source-code - Sie werden neu kompilieren müssen, wenn Sie jemals wollen, dass die Zeichenfolge zu ändern (das ist, warum ich vorgeschlagen, einen Kommandozeilen-parameter in dem ersten Absatz).
getenv()
funktioniert zur Laufzeit.Würden Sie wollen, dies zu behandeln, die über string-Verkettung:
makefile:
Dann in Ihre C-Datei, die Sie haben würden, so etwas wie:
Den compiler verketten von strings zu einem einzigen string preprocessing).
Wenn Sie gcc oder ähnliche compiler verwenden, können Sie die
-D
Flagge, dokumentiert innerhalb der manpage.Einen schnellen überblick zu geben, die Sie tun können
gcc -DSYMBOL=1
, und dadurch würde der compiler hinzufügen das der code:So, in Ihrem makefile, können Sie eine variable, und dann übergeben es an die gcc-Befehlszeile-Optionen.
Ich bin Anfänger in Makefiles, und ich habe endlich einen besseren Weg für die übergabe von Variablen von
makefile
zu#define
, und werden nicht beeinflusst durch Flucht.1. übergeben Sie eine Zeichenfolge
können Sie verwenden Sie folgenden code,
gleich
2. übergeben wird ein int oder char
können Sie verwenden Sie folgenden code,
gleich
3. SampleCode
und main.c