Hvordan unde en definere kommandolinjen med gcc

stemmer
34

Hvordan kan jeg på kompilering unde en kompilator makroen med gcc. Jeg prøvde noen Kompilerings- args til GCC som -D men jeg kan ikke få se meldingen ikke definert.

Takk

#include <iostream>

#define MYDEF


int main(){
#ifdef MYDEF
  std::cout<<defined\n;
#else
  std::cout<<not defined\n;
#endif

}
Publisert på 30/12/2009 klokken 00:48
kilden bruker
På andre språk...                            


6 svar

stemmer
9

http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Preprocessor-Options.html#Preprocessor-Options

De -Ualternativene virket som hva du kunne ha behov ... men så igjen du ikke kan overstyre en definisjon som finnes i kildekoden uten å ty til flere preprosessor direktiver.

Svarte 30/12/2009 kl. 00:52
kilden bruker

stemmer
41

Du kan bruke alternativet med gcc -U, men det vil ikke unde en makro definert i kildekoden. Så vidt jeg vet, er det ingen måte å gjøre det.

Svarte 30/12/2009 kl. 00:52
kilden bruker

stemmer
1

Koden bruk saken er ikke riktig. Som jeg ser, har du hardkodet #definei filen. Hvis kompilatoren utgangspunktet foruts MYDEFudefinert, vil det definere den når den begynner å behandle filen.

Du bør fjerne linjen #define MYDEF. Og jeg håper din test vil fungere, hvis du passerer MYDEFtil -Dog -U.

Svarte 19/07/2012 kl. 08:53
kilden bruker

stemmer
11

Bør vikle den MYDEFdefinisjon i en preprosessor makro, hvis nærvær (definert på kommandolinjen) vil da hindre at MYDEF blir definert. Litt convoluted for å være sikker, men du kan da styre bygge på den måten du ønsker fra kommandolinjen (eller Makefile). Eksempel:

#ifndef DONT_DEFINE_MYDEF
#define MYDEF
#endif

Deretter fra kommandolinjen når du ikke vil MYDEF:

gcc -DDONT_DEFINE_MYDEF ...

Svarte 23/09/2012 kl. 21:23
kilden bruker

stemmer
1

Du kan ty til å filtrere kildekoden og gi dette tilbake til gcc for kompilering, slik pseudo-kode:

grep -v "define MYDEF" yourFile.c | gcc -o yourFile.o -xc -

Håper det hjelper.

Svarte 16/05/2013 kl. 14:00
kilden bruker

stemmer
0

Her er en mulighet som ikke helt dekker din bruk tilfelle, men som jeg funnet å være nyttig i mitt tilfelle.

Hvis din MYDEFble #defined i en egen header fil #included fra .c filen kan du tvinge definisjonen av # include vakt makroen med -Dalternativ (og dermed hindre MYDEF#definition) så enten aktivt #define (fortsatt med -Dopsjon) MYDEFtil noe annet eller bare la den udefinert.

Det er klart at noe annet er definert i topptekstfilen vil også bli savnet, men dette var for meg en løsning for å tvangsunde en makro uten å endre tredjepartskode.

Svarte 16/06/2015 kl. 07:12
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more