Forum: Compiler & IDEs conditional include für versteckte Datei


von Johannes S. (Gast)


Lesenswert?

ich möchte ein C/C++ gcc Projekt auf github veröffentlichen. Im 
Sourcecode habe ich einen Encryption Key der nicht nach github geschoben 
werden soll, wie kann ich das lösen?
Eine Idee war das define in einen eigenen header zu packen und den dann 
in .gitignore aus der Versionskontrolle rauszunehmen. Dann würde 
allerdings das include zu einem Fehler führen wenn jemand das Repo klont 
und kompiliert.
Oder gibt es in git eine Möglichkeit Dateien durch defaults zu ersetzen?

Per define das man aktiviert oder auskommentiert ginge das etwa so:
1
// uncomment to use own key
2
#define SECRET_KEY    "secret"
3
4
#ifndef SECRET_KEY
5
#include "myCredentials.h"
6
#endif

Am Schönsten wäre eine Möglichkeit abzufragen ob ein includefile 
existiert, aber soetwas habe ich nicht gefunden, gibt es das im gcc?

von Roland E. (roland0815)


Lesenswert?

Setze in deinem Header ein Define, und prüfe ab ob dieses gesetzt wurde.

von Vincent H. (vinci)


Lesenswert?


von user (Gast)


Lesenswert?

Du kannst beim Compiler den include Pfad angeben, da gibst du zwei 
Ordner an. Zuerst deinen Ordner in dem die Datei mit deinem Schlüssel 
liegt und dann einen default Ordner in dem ein "default" Schlüssel 
liegt. Der Compiler nimmt dann die erste Datei die er findet. Für dich 
findet er die mit deinem Schlüssel, für jemand anderes die default 
Datei.

von Johannes S. (Gast)


Lesenswert?

danke,
die Lösung von Vincent funktioniert auch mit dem gcc 7, auch wenn C++98 
eingestellt ist, das gefällt mir am besten.
1
#if __has_include("credentials.h")
2
#  include <credentials.h>
3
#else
4
#  error  "rename file credentials.template to credentials.h and enter your private ecryption key"
5
#endif

so wirft das einen Fehler mit dem Hinweis was zu tun ist. Alternativ 
könnte man dann auch ein default define nehmen.
Nur das Syntax highlighting vom eclipse kennt das noch nicht, aber der 
kleine Schönheitsfehler ist tragbar.

von Vn N. (wefwef_s)


Lesenswert?

Johannes S. schrieb:
> ich möchte ein C/C++ gcc Projekt auf github veröffentlichen.

Was jetzt, C oder C++?

Roland E. schrieb:
> Setze in deinem Header ein Define, und prüfe ab ob dieses gesetzt wurde.

Schön. Trotzdem wird der Compiler meckern, weil File nicht gefunden.

Wir haben das (mit C, und SVN statt Git) umschifft, indem die key.h auf 
ignore gesetzt wurde (um versehentliches comitten zu verhindern) und ein 
key_template.h mit Defaultwerten existiert. Im Prebuild wird, wenn kein 
key.h vorhanden ist, die key_template.h nach key.h kopiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.