为具有不同标志的对象文件重构Makefile

您所在的位置:网站首页 makefile的规则 为具有不同标志的对象文件重构Makefile

为具有不同标志的对象文件重构Makefile

2023-03-15 18:55| 来源: 网络整理| 查看: 265

我在同一目录中有一些源.cpp文件,我想将它们编译为目标文件。 其中一些需要“额外”库(所有文件的相同库),并且其中一些库不需要,我想编写一般规则来匹配正确的文件,而不用为每个文件编写特定的规则额外的标志。 更多详细信息我想重构我的Makefile,以便我不必为源文件SourceFileOpenCVNeeded.cpp OCVAlsoHere.cpp TheSameForMe.cpp指定不同的规则(现在它们很少,但它们可能更多)。为具有不同标志的对象文件重构Makefile

这里是我的makefile实际上是这样的:

CPP_FILES := $(wildcard src/*.cpp) OBJ_FILES := $(addprefix obj/,$(notdir $(CPP_FILES:.cpp=.o))) MAIN_SRC := main.cpp OCV_LIBS := `pkg-config opencv --libs` OCV_PATH := `pkg-config opencv --cflags` MY_LIB := launcher LD_FLAGS := $(MAIN_SRC) -L. -l$(MY_LIB) $(OCV_LIBS) CC_FLAGS := -c -fPIC AR_FLAGS := rcs STATIC_LIB := lib$(MY_LIB).a CC := g++ EXEC := test all: lib main main: $(CC) $(LD_FLAGS) -o $(EXEC) lib: $(OBJ_FILES) ar $(AR_FLAGS) $(STATIC_LIB) $^ obj/SourceFileOpenCVNeeded.o: src/SourceFileOpenCVNeeded.cpp $(CC) $(OCV_PATH) $(CC_FLAGS) $(OCV_LIBS) -c -o [email protected] $< obj/OCVAlsoHere.o: src/OCVAlsoHere.cpp $(CC) $(OCV_PATH) $(CC_FLAGS) $(OCV_LIBS) -c -o [email protected] $< obj/TheSameForMe.o: src/TheSameForMe.cpp $(CC) $(OCV_PATH) $(CC_FLAGS) $(OCV_LIBS) -c -o [email protected] $< obj/%.o: src/%.cpp $(CC) $(CC_FLAGS) -c -o [email protected] $< clean: rm -f $(OBJ_FILES) $(STATIC_LIB) $(EXEC)

PS:可以添加到我的Makefile的任何其他方面的改进?

来源

2012-11-05 UnableToLoad

+0

你真的需要不同的标志吗? 'pkg-config --cflags'通常只提供-I选项来指定在哪里查找头文件,如果你不使用这些头文件,那没关系。 –

+0

你可以使obj规则为通用的:'obj /%o:src /%。cpp' –

+1

你不需要在编译阶段链接库和目标文件(很确定它们只会被忽略,当给出'-c'时)。只有在链接最终可执行文件时才需要指定这些库。 – twalberg



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3