如何选择为每个平台编译的源文件?

时间:2015-05-03 23:06:52

标签: c++ makefile cross-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只是一个类定义/原型,而linux /和win32 / source文件只是为该类提供了一种方法。问题是我得到一个编译错误,说如果两个都没有某种形式的构建目标或其他什么存在,那么该类已经被声明。

感谢。

1 个答案:

答案 0 :(得分:1)

多平台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)