2015-05-03 26 views
0

說我有這樣的文件結構:如何選擇爲每個平臺編譯的源文件?

  • 的Win32/Something.cpp

  • LINUX/Something.cpp

  • Something.h

  • 的main.cpp

我將如何能夠實現:

UNAME = $(shell uname -s) 

ifeq ($(UNAME), Linux) 
    OS = linux 
else 
    OS = win32 
endif 

all: 
    g++ ????? 

我一直處於虧損狀態的一個小時左右吧。我從來沒有嘗試過跨平臺的makefile,所以我通常只是讓IDE處理它,但現在我需要創建它,因爲IDE並不是真正爲跨平臺項目所剪裁。

PS:Something.h只是一個類定義/原型,而linux /和win32 /源文件只是爲該類提供了一個方法。問題是我得到一個編譯錯誤,說如果這兩個類都不存在某種形式的構建目標或任何形式,則該類已經被聲明。

謝謝。

回答

1

多平臺Makefiles是一個高級主題。你可能想看看scons。總之,這裏是你如何可以使你的情況下工作:

取決於$(UNAME)建立你的源列表:

UNAME = $(shell uname -s) 
TARGET = myprogam 
SRC_COMMON = main.cpp 

ifeq ($(UNAME), Linux) 
    SRC_OS = $(wildcard linux/*.cpp) 
else 
    SRC_OS = $(wildcard win32/*.cpp) 
endif 

SRC = $(SRC_COMMON) $(SRC_OS) 
OBJ = $(SRC:.cpp=.o) 

$(TARGET): $(OBJ) 
+0

我怎麼會去了解實際上選擇的是每一個源文件的目錄,但?對不起,我是這個makefile的新手,說實話,它似乎讓人困惑。 – user3530525