当前位置:  开发笔记 > 编程语言 > 正文

根据当前操作系统更新makefile中的CFLAGS或LDFLAGS

如何解决《根据当前操作系统更新makefile中的CFLAGS或LDFLAGS》经验,为你挑选了0个好方法。

我正在尝试创建一个在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)

但是,当我运行此代码,无论是cflagsldflags还是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上。

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有