conditional include für versteckte Datei

Gast #5457717
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?
Gast #5457773
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.
Gast #5457788
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.
#5462386
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren