Où est-ce que je me trompe? Je veux définir une valeur de préprocesseur sur la ligne de commande pour g ++ mais elle échoue. Ci-dessous un exemple de code qui répliquent mon problème:Ne compile pas avec une valeur de préprocesseur sur la ligne de commande
[modifier] J'utilise:
g ++ (Debian 4.3.2-1.1) 4.3.2
GNU Make 3,81
test.h
#ifndef _test_h_
#define _test_h_
#include "iostream"
#if defined(MY_DEFINED_VALUE)
#if (MY_DEFINED_VALUE != 5)
#undef MY_DEFINED_VALUE
#define MY_DEFINED_VALUE 3
#endif //(MY_DEFINED_VALUE != 5)
#else //defined(MY_DEFINED_VALUE)
#error Error - MY_DEFINED_VALUE is not defined
#endif //defined(MY_DEFINED_VALUE)
class test
{
public:
int val;
test() {}
void show() { std::cout << "val = " << val << "\n"; }
};
#endif //_test_h_
test.cpp
//#define MY_DEFINED_VALUE 5
#include "test.h"
int main()
{
test t;
t.val = MY_DEFINED_VALUE;
t.show();
return 0;
}
Makefile
#=====
CC = g++
LD = g++
USERDEFINES = -DMY_DEFINED_VALUE
CFLAGS = -Wall
LDFLAGS =
RM = /bin/rm -f
SRCS = test.cpp
OBJS = test.o
PROG = test
#=====
$(PROG): $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) -o $(PROG)
#=====
%.o: %.c
$(CC) $(USERDEFINES) $(CFLAGS) -c $<
#=====
clean:
$(RM) $(PROG) $(OBJS)
Si je ne commente pas le #define
dans test.cpp, tout va bien (imprime 5). Si je le commente, j'obtiens le #error
.
L'appel 'g ++ -DMY_DEFINED_VALUE x.cpp' fonctionne directement. (imprime 3). – kennytm
@KennyTM: C'est ce que je fais dans le Makefile - cela voudrait dire que mon compilateur g ++ est corrompu (difficile à croire). – slashmais
Ou peut-être votre makefile est faux. Avez-vous essayé de faire 'g ++ -DMY_DEFINED_VALUE test.cpp' directement dans la ligne de commande? – kennytm