为具有不同标志的对象文件重构Makefile |
您所在的位置:网站首页 › makefile的规则 › 为具有不同标志的对象文件重构Makefile |
我在同一目录中有一些源.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 |