2016-09-30 50 views
0

我想爲Windows和Linux版本創建一個Makefile。問題是我必須爲每個平臺連接不同的動態庫。 C預處理器可能有幾個不錯的變量,例如_WIN32。如何提取這些信息?從C預處理器導入變量到Makefile中

解決方案必須使用交叉編譯器。我無法創建並運行一個小程序。我只有一個,不同的變量,CC,環境可能是一樣的。

反過來很容易,-D開關。


類似,但不同的問題:

Makefile that distincts between Windows and Unix-like systems
我用同樣的make程序。只有CC變量是不同的。

+0

HTTP的可能重複定義爲抑制linemarkers
的一代 -xc國旗://計算器.com/questions/4058840/makefile-that-distincts-between-windows-and-unix-like-systems – racraman

+0

@racraman問題是關於本地構建環境。我有交叉編譯器。 (我已經編輯了一些問題。) – Michas

回答

0

上回答TTK

創建變量的文件,像這樣:

#ifdef _WIN32 
-lgdi32 -lopengl32 
#else 
-lpthread -lX11 -lXxf86vm -lXcursor -lXrandr -lXinerama -lXi -lGL 
#endif 

而這樣的事情在Makefile:

A_FLAGS = $(strip $(shell $(CPP) -P $(CPPFLAGS) ./a_flags.cpp)) 
# or 
A_FLAGS = $(strip $(shell $(CPP) -P -xc $(CPPFLAGS) ./a_flags)) 

$(CPP) - 中C預處理器可執行文件,應由Make progr定義我
-P - 旗迫使預處理治療文件作爲C源
$(CPPFLAGS) - - 爲預處理器可選的標誌由程序員

1

我不知道你是否能得到直接的變量,但你可以試試這個解決方案:

CPP=i686-w64-mingw32-cpp 
CPPFLAGS= -P 
WIN32=$(shell echo _WIN32 | $(CPP) $(CPPFLAGS)) 

iswin32: 
    @echo $(WIN32) 

這個例子將輸出1:

$ make iswin32 
1 

如果你正在處理多個聲明還要考慮創建一個包含所有聲明的文件,對其進行預處理並將其包含在makefile中。基於

$ cat declaration 
WIN32 = _WIN32 
+1

代碼不起作用,我得到了'cc:致命錯誤:沒有輸入文件',但-P標誌對我來說是足夠的幫助。 – Michas

+0

這是因爲默認情況下'gcc'不會從標準輸入讀取。嘗試添加標誌'-xc -'這會告訴'gcc'從'stdin'中讀取並且提示語言(在這種情況下爲C)。 – TTK