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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.