Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 为多个目标编译_Makefile_Gnu Make - Fatal编程技术网

Makefile 为多个目标编译

Makefile 为多个目标编译,makefile,gnu-make,Makefile,Gnu Make,我想分别使用g++和mingw将我的程序编译到linux和windows。编译之间的唯一区别是要使用的编译器和输出的文件名 单个make命令应生成两个输出文件。在makefile中使用尽可能少的复制来实现这一点的最佳方法是什么 这个怎么样: linux-name: CC:=g++ windows-name: CC:=mingw linux-name windows-name: $(CC) whatever -o $@ 编辑: 我上面写的只是makefile的新部分;我假设makefi

我想分别使用g++和mingw将我的程序编译到linux和windows。编译之间的唯一区别是要使用的编译器和输出的文件名

单个
make
命令应生成两个输出文件。在makefile中使用尽可能少的复制来实现这一点的最佳方法是什么

这个怎么样:

linux-name: CC:=g++
windows-name: CC:=mingw

linux-name windows-name:
    $(CC) whatever -o $@
编辑:

我上面写的只是makefile的新部分;我假设makefile的其余部分是隐含的。更明确地说:

all: linux-name windows-name

linux-name: CC:=g++
windows-name: CC:=mingw

linux-name windows-name: foo.o bar.o baz.o SomethingElse
    $(CC) $(CCFLAGS) whatever $^ -o $@

%.o: %.cc
    $(CC) $(CFLAGS) -I$(INC_DIR) whatever -c $< -o $@

SomethingElse:
    build somehow
all:linux名称windows名称
linux名称:CC:=g++
windows名称:CC:=mingw
linux名称windows名称:foo.obar.obaz.osomethingelse
$(CC)$(CCFLAGS)任何$^-o$@
%.o:%.cc
$(CC)$(CFLAGS)-I$(INC_DIR)无论什么-c$<-o$@
有些事:
建造

我不知道可以这样放置两个目标名称。不幸的是,它不适合我,只构建了linux名称。还有,如果我有需要编译的依赖目标,我该怎么办?现在编辑后,我发现我的第一次尝试没有成功,因为我犯了一个错误,我将“all”目标的定义放在“linux name”和“windows name”目标之后。然而,您的解决方案仍然存在问题,对象文件只编译一次,在您的示例中,它们将只针对linux进行编译。当make将执行windows名称目标时,目标文件已经存在,并且不会重新编译它们;你必须做出设计决定。你想让Make做什么?我想让Make生成两个为不同平台编译的文件。@Artium:两个文件?还是2n文件?您想对对象文件做些什么?是否希望在生成其他可执行文件时重建所有对象文件?是否要两组对象文件,每个系统一组?如果是这样,您希望它们通过文件名来区分,还是保存在不同的目录中?或者在每次生成后删除所有对象文件是否令人满意?