如何选择为每个平台编译哪些源文件?
How do I choose what source files get compiled for each platform?
假设我的文件结构如下:
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 只是一个 class definition/prototype 而 linux/ 和 win32/ 源文件只是提供了一种方法 class。问题是我得到一个编译错误,说 class 已经声明,如果两者都存在而没有某种形式的构建目标或其他任何形式。
谢谢。
多平台 Makefile 是一个高级主题。你可能想看看 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)
假设我的文件结构如下:
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 只是一个 class definition/prototype 而 linux/ 和 win32/ 源文件只是提供了一种方法 class。问题是我得到一个编译错误,说 class 已经声明,如果两者都存在而没有某种形式的构建目标或其他任何形式。
谢谢。
多平台 Makefile 是一个高级主题。你可能想看看 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)