因此,据我所知,没有另一个问题最近足以与新的主要更新兼容。
我正在使用 XCode 4 在 Mac 上编程。
我需要为 Windows 编写程序。
我将如何做到这一点,它是相同的确切代码只是编译不同?!?
任何和所有的帮助将不胜感激,我不知道我在这里做什么。
谢谢!
如果您严格遵守 Mac 和 Windows 都支持的 POSIX C 子集(这隐含地限制您使用控制台应用程序),您可能会获得适用于 OS X 的 Windows 交叉编译器并以这种方式构建应用程序。
但是,如果您只是在 VM 中(或通过 Boot Camp)运行 Windows 并在 Visual Studio 或任何其他 Windows 开发环境中开发应用程序,您可能会发现您的生活大大简化了。这是制作 Windows GUI 应用程序的唯一方法,实际上也是编写 Windows 控制台应用程序的唯一好方法。
虽然系统非常不同,但可以编写在两者上编译的代码,而不是任何代码,您需要仔细设计它;这被称为“便携式代码”。
假设您已经编写了代码;然后您可以使用 MINGW(例如brew install mingw-w64
)为 Windows 进行交叉编译,您甚至可以.exe
使用 WINE 在 Mac OS X 上测试结果;clang 也可以用于为 Windows 编译,但我从未尝试过。
下面是Makefile
一个真实项目的例子:
toolchain = mingw
#toolchain = wine
mingw- = i586-mingw32msvc-
mingw-cc := ${mingw-}gcc
mingw-cxx := ${mingw-}c++
mingw-rc := ${mingw-}windres
wine-cc = winegcc
wine-cxx = wineg++
wine-rc = wrc
CC := ${${toolchain}-cc}
CXX := ${${toolchain}-cxx}
RC := ${${toolchain}-rc}
LDFLAGS = -mwindows -mno-cygwin
LIBS = -lodbc32 -lole32 -loleaut32 -lwinspool -luuid
app-objs = app.o \
app_resources.o \
input.o \
user_manual.o \
hints.o
all: app.exe
clean:
${RM} ${app-objs} app.exe
app.exe: ${app-objs}
${CC} ${LDFLAGS} -o $@ ${app-objs} ${LIBS}
.c.o:
${CC} -c ${CFLAGS} -o $@ $<
.rc.o:
${RC} ${RCFLAGS} -o $@ $<
.SUFFIXES: .rc .res
.PHONY: all clean
顺便说一句,该示例来自最初由其他人使用 MS Visual Studio 构建的项目,几年后由我移植到 MINGW 并从 Debian GNU/Linux 交叉编译(但对于 Mac OS X 是相同的)。这只是一个例子,但大多数语言确实有某种方式来交叉编译,这或多或少是等价的。
现在,真正棘手的部分是代码库,一种在 Mac 中本地开发应用程序并让它也为 Windows 编译的方法是使用受良好支持的可移植框架,如 Qt,它保证您在许多操作系统中使用相同的 API .
尽管如此,关于目标平台的某些部分可能略有不同,可能需要更正,但往往是微小的变化。
因此,简而言之,通过使用可移植框架,只需设置现有的构建系统,无论它是什么,使用正确的交叉编译工具,提供所述框架,它都会或多或少地在相同的环境中编译方式与原生构建一样。