修改生成文件以包含子目录
Modify the makefile to include subdirectories
我正在使用一个 c++ 的小程序来学习 makefile。
该程序有 2 个源文件(main.cpp 和 classf.cpp)和一个头文件 (classf.h)。所有文件都包含在称为"testmake"的项目目录中。这是日食在风浪上生成的生成文件:
CXXFLAGS = -O2 -g -Wall -fmessage-length=0
OBJS = main.o classf.o
LIBS =
TARGET = createPddl.exe
$(TARGET): $(OBJS)
$(CXX) -o $(TARGET) $(OBJS) $(LIBS)
all: $(TARGET)
clean:
rm -f $(OBJS) $(TARGET)
我想修改makefile以接受新的子目录,例如,当我添加一个名为"testmake/src"的文件夹并将文件main.cpp移动到其中时,名为"testmake/csource"的文件夹并将classf.cpp移动到其中,并创建一个名为"testmake/cheader"的文件夹并将classf.h移动到其中。
此生成文件由 eclipse 自动生成,不接受任何更改。在那里,我手动创建了一个 make 文件,该文件适用于任何结构为树的 c++ 项目。
我实际上一般都使用这个制作文件
CC := g++ # This is the main compiler
SRCDIR := src
BUILDDIR := build
TARGETDIR :=bin/
TARGET := pddlcrate
DATADIR := data
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
CFLAGS := -g # -Wall
#LIB := -pthread -lmongoclient -L lib -lboost_thread-mt -lboost_filesystem-
mt -lboost_system-mt
INC := -I include
$(TARGET): $(OBJECTS)
@echo " Linking..."
@echo " $(CC) $^ -o $(TARGETDIR)$(TARGET) $(LIB)"; $(CC) $^ -o
$(TARGETDIR)$(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDDIR)
@echo " $(CC) $(CFLAGS) $(INC) -c -o $@ $<"; $(CC) $(CFLAGS) $(INC) -c - o $@ $<
clean:
@echo " Cleaning...";
@echo " $(RM) -r $(BUILDDIR) $(TARGET)"; $(RM) -r $(BUILDDIR) $(TARGET)
对于具有此树结构的任何 C++ 项目
$ tree .
├── Makefile
├── bin
>exefile
├── include
> *.h files
├── obj
> *.o files
├── src
>*.cpp
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- CMake 子目录 - 编译测试子项目时,包含的头文件没有此类文件或目录
- 节点构建失败。无法在包含目录的子目录中找到库头文件
- 这是在生成文件中包含子目录的正确方法吗?
- 是什么让 clang 在包含路径的子目录中看起来?
- 如何在子目录中生成包含源的生成文件
- 仅将包含路径的特定子目录添加到包含
- Eclipse 编译器包含路径子目录
- Eclipse 在子目录中找不到包含文件
- 使用子目录中的包含进行构建
- 包含子目录中的 G++ 头文件
- 修改生成文件以包含子目录
- VS2015 在子目录中找不到包含标头
- 在子目录中包含路径
- 试图将文件包含在带有代码块的子目录中