2015-05-21 35 views
1

我想用Makefile編譯項目。使用定義目標在Linux上進行編譯

我在我的.h的一個定義用於Linux目標

#define LINUX_TARGET (COMPILER_GCC_4_4_1|FAMILY_LINUX|TYPE_X86) 
... 
#ifdef _LINUX_TARGET_ 
    #define __linux__ 
    #define TARGET LINUX_TARGET 
... 
#ifdef __linux__ 
#define __LINUX__ 
#endif 

所以在我的Makefile我說,我會用這個目標:

... 
CFLAGS += -D_LINUX_TARGET_ 
... 

Butwhen我編譯我得到這個錯誤:

../../../../../../../Generic/Common/Include/target_definition.h:145:0: warning: "__linux__" redefined [enabled by default] 
#define __linux__ 
^ 
../../../RefFT/Float/src/LIMITOR_main_32f.c:1:0: note: this is the location of the previous definition 
/*--------------------------------------------------------------------------- 
^ 

我不明白爲什麼,beceause這個工程爲MacOS或Windows目標...

編輯

約阿希姆Pileborg的答案後,我做了什麼:

#define LINUX_TARGET (COMPILER_GCC_4_4_1|FAMILY_LINUX|TYPE_X86) 
... 
#ifdef _LINUX_TARGET_ 
    #ifndef __linux__ 
     #define __linux__ 
    #endif 
    #define TARGET LINUX_TARGET 
... 
#ifdef __linux__ 
#define __LINUX__ 
#endif 

回答

1

因爲__linux__在Linux上構建時預先定義

+0

所以我不必定義它? – leykan

+0

正確。如果你想檢查是否定義了它,並定義它,那麼你可以先使用#ifndef __linux__。 – jakebower

+0

但是,如果我沒有在我的Makefile中定義它,我得到這個錯誤'#error你必須在你的編譯器項目屬性中定義一個目標。「如果不是這樣,它會是什麼? – leykan

相關問題