c++ - 生成 C 和 CPP 文件的 Makefile

标签 c++ c makefile

我一直在寻找一个 Makefile 来编译一个包含大量 C 和 C++ 文件的大型项目。我已经使用 Eclipse 成功编译了它,但我想转到一个独立的 Makefile。 我发现这个通用 Makefile 非常适合我的项目,除了它只能编译 C 或 C++ 文件,但不能在一次运行中同时编译这两种文件...因此它在链接时失败。

为 CPP 或 C 编译的原始 Makefile 的位:

        SRC_EXT = cpp
        OURCES = $(shell find $(SRC_PATH)/ -name '*.$(SRC_EXT)' -printf '%T@\t%p\n' \
        SOURCES = $(shell find $(SRC_PATH)/ -name '*.$(CPP_EXT)' -o -name '*.$(C_EXT)' -printf '%T@\t%p\n' \
                            | sort -k 1nr | cut -f2-)
        # fallback in case the above fails
        rwildcard = $(foreach d, $(wildcard $1*), $(call rwildcard,$d/,$2) \
                                $(filter $(subst *,%,$2), $d))
        ifeq ($(SOURCES),)
            SOURCES := $(call rwildcard, $(SRC_PATH)/, *.$(SRC_EXT))
        endif
OBJECTS = $(SOURCES:$(SRC_PATH)/%.$(SRC_EXT)=$(BUILD_PATH)/%.o)
DEPS = $(OBJECTS:.o=.d)

我尝试将其修改为:

SRC_EXT = cpp c
SOURCES = $(shell find $(SRC_PATH)/ -name '*.$(CPP_EXT)' -o -name '*.$(C_EXT)' -printf '%T@\t%p\n' \
                    | sort -k 1nr | cut -f2-)
# fallback in case the above fails
rwildcard = $(foreach d, $(wildcard $1*), $(call rwildcard,$d/,$2) \
                        $(filter $(subst *,%,$2), $d))
ifeq ($(SOURCES),)
    SOURCES := $(call rwildcard, $(SRC_PATH)/, *.$(SRC_EXT))
endif

但我不确定如何处理 OBJECTS 指令以使其与多个扩展一起工作:

OBJECTS = $(SOURCES:$(SRC_PATH)/%.$(SRC_EXT)=$(BUILD_PATH)/%.o)

有人可以帮忙吗?

谢谢

最佳答案

首先,将.cpp替换为.o,然后将剩余的.c替换为.o

关于c++ - 生成 C 和 CPP 文件的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108346/

相关文章:

c++ - 为什么 "long *"和 "int *"在 32 位代码中不兼容?

c - 我想在 c 中实现一个结构。在 FOR LOOP 部分,没有通过 scanf 获取 P[0].processname 它继续下一部分

c - CUDA 和 C 的 Makefile

makefile - 替换 Makefile 中的文件名

makefile - 编写 makefile 时如何在退出时终止子进程?

c++ - 将二进制文件内容读取到 std::string 的最佳方式是什么?

c++ - 将光标定位在 RichEdit 控件中文本的末尾

c++ - GCC 无法使用 init-capture 捕获 'this' 指向模板类型的指针

c - 在c开头添加节点

c++ - 需要大量计算,并且需要在耦合策略模式下的两个行为之间共享。应该在哪里完成并举行