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

时间:2017-03-13 07:07:13

标签: c++ c makefile

我是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。例如:

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

也让我知道这是否可以毫无问题地完成。

1 个答案:

答案 0 :(得分:0)

查看规则:

{path:'',component:LatestPositionComponent, pathMatch: 'full'},

第一行说run1: $(OBJS) $(OBJS)=$(SRCS) $(SRC_DIRS)/%.c.o: %.c @echo "from run1" ./$(basename $(<F)) ${ARGS} 依赖于run1,但没有任何明确的食谱。下一行执行赋值,最后一行使用一些配方为所有$(OBJS)文件定义模式规则。这些食谱 .c.o无关。当您运行run1时,它将构建依赖项(make run1),其中包含所有$(OBJS)cpp.o个文件。因此,它将运行两种模式规则,并输出两行。

我认为你想要做的是将c.o分成$(OBJS)$(C_OBJS),然后让$(CPP_OBJS)依赖于一组,{{1依赖于另一个,然后让run1依赖于它们。