makefile 上的 patsubst

发布于 2024-10-17 04:07:45 字数 253 浏览 2 评论 0原文

我必须使用不同的 CFLAGS 从同一组 *.c 创建不同的 *.o 文件。我想使用 patsubst 从相同的 *.c 生成不同的 *.o 文件。我在下面的语句中做错了,请帮忙(我想从同一组 c 源文件生成一组具有 ($<)_O0.o 和另一个 ($<)_O2.o 的目标文件) :

 $(CC) $(CFLAGS_02) -c $< -o $(patsubst %.c,%_O2.o,$<)

谢谢

I have to create different *.o files from a same set of *.c using various CFLAGS. I wanted to use patsubst to generate different *.o files from same *.c. I am doing something wrong the following statement, please help (I want to generate one set of object files having ($<)_O0.o and the other ($<)_O2.o from the same set of c source files):

 $(CC) $(CFLAGS_02) -c 
lt; -o $(patsubst %.c,%_O2.o,
lt;)

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肩上的翅膀 2024-10-24 04:07:45

使用 patsubst 列出要构建的对象,然后对每种类型的构建使用单独的规则。

像这样的东西:

SRC_FILES = source1.c source2.c 

OBJ_FILES_O0 = $(patsubst %.c,%_O0.o,$(SRC_FILES)) 
OBJ_FILES_O2 = $(patsubst %.c,%_O2.o,$(SRC_FILES))

CFLAGS_O0 := -O0 
CFLAGS_O2 := -O2

all: $(OBJ_FILES_O0) $(OBJ_FILES_O2)

$(OBJ_FILES_O0): %_O0.o: %.c
    $(CC) $(CFLAGS_O0) -c 
lt; -o $@

$(OBJ_FILES_O2): %_O2.o: %.c
    $(CC) $(CFLAGS_O2) -c 
lt; -o $@

Use patsubst to make lists of the objects that you want to build, and then use separate rules for each type of build.

Something like this:

SRC_FILES = source1.c source2.c 

OBJ_FILES_O0 = $(patsubst %.c,%_O0.o,$(SRC_FILES)) 
OBJ_FILES_O2 = $(patsubst %.c,%_O2.o,$(SRC_FILES))

CFLAGS_O0 := -O0 
CFLAGS_O2 := -O2

all: $(OBJ_FILES_O0) $(OBJ_FILES_O2)

$(OBJ_FILES_O0): %_O0.o: %.c
    $(CC) $(CFLAGS_O0) -c 
lt; -o $@

$(OBJ_FILES_O2): %_O2.o: %.c
    $(CC) $(CFLAGS_O2) -c 
lt; -o $@
习ぎ惯性依靠 2024-10-24 04:07:45

您还可以使用通配符指定目录中的所有文件。

例如:

#Generic Makefile.

CC := g++

LD := g++

CFLAGS := -c

LDFLAGS := -L<path to lib> -l<libname> \

           -L<path to lib> -l>libname> \
            ......................

ifeq (${TARGETARCH}, debug)

  CFLAGS += -g -O0

elif 

  CFLAGS += -O4 -DNDEBUG

SRCFILES := $(wildcard *.cpp)

OBJFILES := $(patsubst %.cpp, %.o, ${SRCFILES})


all: main

main: ${OBJFILES}

  @echo "[Linking]"$@

  ${LD} ${LDFLAGS} ${OBJFILES}

%.o: %.cpp

  @echo "[Compiling]"$@

  ${CC} ${CFLAGS} $^ -o $@

You can also use wild cards to specify all files in the directory.

eg:

#Generic Makefile.

CC := g++

LD := g++

CFLAGS := -c

LDFLAGS := -L<path to lib> -l<libname> \

           -L<path to lib> -l>libname> \
            ......................

ifeq (${TARGETARCH}, debug)

  CFLAGS += -g -O0

elif 

  CFLAGS += -O4 -DNDEBUG

SRCFILES := $(wildcard *.cpp)

OBJFILES := $(patsubst %.cpp, %.o, ${SRCFILES})


all: main

main: ${OBJFILES}

  @echo "[Linking]"$@

  ${LD} ${LDFLAGS} ${OBJFILES}

%.o: %.cpp

  @echo "[Compiling]"$@

  ${CC} ${CFLAGS} $^ -o $@
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文