我一直在试图弄清楚如何创建一个可以在所有主要操作系统上编译的C程序。我曾考虑过使用makefile,因此我只需更改目标操作系统,但我有一些问题。我的第一个问题是,我不知道如何更改目标操作系统,这样我可以在一个操作系统上编译,但可以在所有操作系统上使用该应用程序。我的第二个问题是,我不知道如何让它自动编译src目录中的所有.c文件,这样我就不必在每次添加新文件时修改makefile。有人知道怎么做吗?
我当前的makefile (当前未从here修改)
CC=gcc
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@q2发布于 2013-03-06 05:43:07
GNU Autoconf是一个很好的起点。我不能给你一个完整的答案,因为我不知道你会为Windows做什么,除了维护一组nmake脚本。虽然有一个学习曲线,但它们使编写跨平台的make文件和c代码成为可能。它不仅可以为你处理多个源文件,还可以帮助你定义目标,比如'all',' install‘,'clean’等。如果你熟悉下载一个项目,然后输入'./configure‘,然后输入'make install’,那么你可能已经是Autoconf生成项目的用户了。
除了处理多个源文件之外,使用Autoconf还有其他原因。
使C/ C ++开发在不同风格的Unix上变得困难的是“Unix”和C的定义。不同风格的Unix会有略微不同的库或系统调用,这取决于它们支持的标准风格。所以,在编写代码时,你会看到#定义指定了一组预处理器符号,这些符号定义了你想要使用的Unix和C的版本。从GCC到HP C或其他供应商的C编译器可能包含不同的“默认”行为级别,因此您需要明确预期的行为。
其次,您需要定义需要哪些库。在您的构建中,您可能需要探测mysql库,并决定如果没有安装这些库该怎么办。在某些情况下,您可能根本不需要构建,或者在某些情况下,您可能只需要替换另一个库(如libdb)。我已经尝试过编写复杂的makefile来支持两种操作系统(Solaris和Linux),因此我不想重新发明这个轮子。
https://stackoverflow.com/questions/15234461
复制相似问题