gpt4 book ai didi

c++ - Makefile 执行多个程序 (c/c++)

转载 作者:行者123 更新时间:2023-11-30 16:48:58 25 4
gpt4 key购买 nike

我是makefile的新手用户,我创建了规则(run1、run2等)来分别执行c和c++对象(单独编译c/c++成功,也需要单独执行它们)但它似乎不起作用预料之中,有人能告诉它是否出错以及如何纠正它

TARGET_EXEC ?=

BUILD_DIR ?= .
SRC_DIRS ?= .

SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c)
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)

INC_DIRS := $(shell find $(SRC_DIRS) -type d)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))

CC = gcc
CXX = g++
CFLAGS = -g -Wall
CPPFLAGS = -g -lws2_32 -Wno-write-strings

.PHONY: all run1 run2 run3 clean
all: $(BUILD_DIR)/$(TARGET_EXEC)

$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
@echo "Build completed"

# c source
$(BUILD_DIR)/%.c.o: %.c
@echo "Compiling C sources"
@$(CC) $(CFLAGS) $< -o $(basename $(<F))
@echo "Compiled successfully"

# c++ source
$(BUILD_DIR)/%.cpp.o: %.cpp
@echo "Compiling C++ sources"
@$(CXX) -o $(basename $(<F)) $(CXXFLAGS) $< $(CPPFLAGS)
@echo "Compiled successfully"

clean:
@echo "Cleaning"
@$(RM) -r *.exe
@echo "Cleaned up"

run1: $(OBJS)
$(OBJS)=$(SRCS)
$(SRC_DIRS)/%.c.o: %.c
@echo "from run1"
./$(basename $(<F)) ${ARGS}

run2: $(OBJS)
$(OBJS)=$(SRCS)
$(SRC_DIRS)/%.cpp.o: %.cpp
@echo "from run2"
./$(basename $(<F)) ${ARGS}

使用的命令:make run1

输出:

    from run1
-> execution
from run2
-> execution

预期输出

    from run1
--> execution of exe created

此外,我正在尝试传递我从 link 引用的参数。传递使运行。例如:

make ARG="-p TCP -n 127.0.0.1 -e 10006 -l 1" run2 

也请告诉我这是否可以顺利完成。

最佳答案

查看规则:

run1: $(OBJS)
$(OBJS)=$(SRCS)
$(SRC_DIRS)/%.c.o: %.c
@echo "from run1"
./$(basename $(<F)) ${ARGS}

第一行表示 run1 依赖于 $(OBJS),但没有任何显式配方。下一行进行分配,最后一行为所有带有一些配方的 .c.o 文件定义模式规则。这些配方run1关联。当您运行 make run1 时,它将构建依赖项 ($(OBJS)),其中包括所有 cpp.oc.o 文件。因此,它将运行两个模式规则,并输出您的两行。

我认为你想要做的是将 $(OBJS) 拆分为 $(C_OBJS)$(CPP_OBJS) ,然后让 run1 依赖于一组,而 run2 依赖于另一组,然后让 $(TARGET_EXEC) 依赖于两者。

关于c++ - Makefile 执行多个程序 (c/c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42758110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com