我正在尝试创建一个在OSX和Linux上均可使用的makefile。
我的问题是我需要更改,cflags
并且ldflags
取决于操作系统,makefile已执行,但无法使其正常工作。那是我的makefile:
OS:=$(shell uname) DST=hello SRC=$(wildcard *.cpp) OBJ=$(SRC:.cpp=.o) CFLAGS= all: clean DetectOS $(DST) DetectOS: ifeq ($(OS),Darwin) @echo OS : $(OS) CC=g++ LDFLAGS="-lm -framework OpenCL" CFLAGS+=-O3 endif ifeq ($(OS),Linux) #Coming soon... endif $(DST): $(OBJ) $(CC) -o $@ $^ $(LDFLAGS) %.o: %.cpp $(CC) -o $@ -c $< $(CFLAGS) clean: rm -rf *.o $(DST)
但是,当我运行此代码,无论是cflags
,ldflags
还是CC
在更新的ifeq
条件块。我得到以下结果:
$ make rm -rf *.o hello OS : Darwin CC=g++ LDFLAGS="-lm -framework OpenCL" CFLAGS+=-O3 cc -o opencl.o -c opencl.cpp cc -o hello opencl.o Undefined symbols for architecture x86_64:....
如您所见,检测到该操作系统是因为我们进入了ifeq
条件块,但未CC
更新,并保留了未初始化的值cc
。最后,链接器过程失败,因为未在中引用OpenCL ldflags
。
还有一点,如果我不加引号,则会LDFLAGS="-lm -framework OpenCL"
出现错误:
LDFLAGS=-lm -framework OpenCL /bin/sh: -framework: command not found make: *** [DetectOS] Error 127
基于多个示例(此处基于stackoverflow),我应该不加引号。
我目前在Mac OS X Yosemite上。