Makefile
Переменная WITH_ATS
равна не пуста при запуске make WITH_ATS=0
, и поэтому ifdef WITH_ATS
в файле Makefile оценивается как true (т. Е. Не то, что вы ожидаете).
Что вам действительно нужно, так это проверить, равен ли WITH_ATS
1
.Это может быть достигнуто с помощью ifeq
:
ifeq ($(WITH_ATS),1)
INCLUDEDIR += -I../at2_build/include/
LDFLAGS += -L$(AT2) -lat2 -Wl,-rpath=$(AT2)
CFLAGS += -DWITH_ATS
endif
C исходный файл
В вашем src_file.c
вам не нужны ни #ifndef
, ни #define
.Таким образом, вы реализуете include guard , который не тот, который вы хотите, что вам действительно нужно:
#ifdef WITH_ATS
#include "ats.h"
#endif
То есть включитьats.h
, если определено WITH_ATS
.
Обратите внимание, что в исходном файле C WITH_ATS
- это просто пустой макрос (т. Е. С ним не связано никакое значение), тогда как в вашем make-файле, WITH_ATS
- это переменная, которая принимает значение, переданное в командной строке, например, 0
для make WITH_ATS=0
.