精华内容
下载资源
问答
  • Linux makefile 文件使用例子,用Makefile编译多文件。 一个简单的Makefile的编写,适合初学者.
  • SRCS = $(wildcard *.c)#这里变量OBJS的值就是将SRCS里面所有.c文件编译出的.o目标文件 OBJS = $(SRCS:.c = .o)#变量CC代表我们要使用的编译器 CC = gcc#这里指定除了编译器默认的头文件和库文件的路径之外需要额外...
    #这条语句定义了一个变量SRCS,它的值就是当前面目录下面所有的以.c结尾的源文件。
    SRCS = $(wildcard *.c)
    
    #这里变量OBJS的值就是将SRCS里面所有.c文件编译出的.o目标文件
    OBJS = $(SRCS:.c = .o)
    
    #变量CC代表我们要使用的编译器
    CC = gcc
    
    #这里指定除了编译器默认的头文件和库文件的路径之外需要额外引用的头文件路径以及库的路径(×××表示路径)。
    #INCLUDES = -I/×××
    #LIBS = -L/×××
    
    #CCFLAGS变量存放的是编译选项
    CCFLAGS = -g -Wall -O0
    
    #my_app依赖于所有的.o文件,$^代表$(OBJS),$@代表my_app
    my_app : $(OBJS)
        $(CC) $^ -o $@ #$(INCLUDES) $(LIBS)
    
    #将所有的.c源代码编译成.o目标文件,%:模式规则
    %.o : %.c
        $(CC) -c $^ $(CCFLAGS)
    #在执行make clean之后删除所有编译过程中生成的.o文件。
    clean:
        rm *.o
    
    #每次执行make clean时都要执行rm *.o命令
    .PHONY:clean
    

    ====================================================================================

    CXX ?= g++
    
    CXXFLAGS += -c -Wall $(shell pkg-config --cflags opencv) -std=c++11
    LDFLAGS += $(shell pkg-config --libs --static opencv)
    
    
    SRCS = $(wildcard *.cpp)
    OBJS := $(patsubst %.cpp, %.o, ${SRCS})
    
    EXEC=main
    $(EXEC): $(OBJS)
        $(CXX) -o $@ $(OBJS) $(LDFLAGS)
    $(OBJS):$(SRCS)
        $(CXX) -c $(SRCS) $(CXXFLAGS)
    
    clean: ; rm -f *.o $(EXEC)
    展开全文
  • makefile实现多目录文件编译

    千次阅读 2017-03-08 20:02:32
    现要在Ubuntu上编译一个大型...vote.c(主函数在此.c文件中实现makefile /home/vote/comlib: include(文件夹) lib(文件夹) libsrc(文件夹) /home/vote/comlib/include: comlib.h(头文件) /home/...

    现要在Ubuntu上编译一个大型工程文件,假设各文件目录及关系如下:

    /home/vote:

    comlib(文件夹)

    vote.c(主函数在此.c文件中实现)

    makefile

    /home/vote/comlib:

    include(文件夹)

    lib(文件夹)

    libsrc(文件夹)

    /home/vote/comlib/include:

    comlib.h(头文件)

    /home/vote/comlib/lib:

    暂无()

    /home/vote/comlib/libsrc:

    file.c、tcp.c、debug.c(这三个.c文件实现main函数调用的函数,函数定义在comlib.h中完成)

    makefile

     

    (一)现要编译此工程则需要实现两个makefile,一个是/home/vote/comlib/libsrc下的makefile,用来编译子目录下各文件,其写法如下所示:

    .SUFFIXES:.c
    HOMEDIR=/home/vote
    COMDIR=$(HOMEDIR)/comlib
    INCDIR=-I$(COMDIR)/include


    CC=gcc
    CFLAG=-O 
    EDF=
    help:
            @echo Please input filename that will be made
            @echo 'syntax: make <help|all|"filename">'
    all:file tcp debug
    .c:
            if [ -f $(COMDIR)/lib/libcom.a ]; then ar -x $(COMDIR)/lib/libcom.a; fi  
            $(CC) -c $< $(CFLAG) $(INCDIR)
            ar -rv libcom.a *.o 
            rm *.o
            mv libcom.a $(COMDIR)/lib

     

    各变量及命令的含义:

    .SUFFIXES 指定合法的源文件扩展名,此处是.c文件,即makefile只编译.c文件。

    HOMEDIR为宏,指定当前项目的主目录,其余两个性质相同。

    CFLAG指定编译选项。

    if [ -f $(COMDIR)/lib/libcom.a ]; then ar -x $(COMDIR)/lib/libcom.a; fi         此句是if函数的一种用法,此处含义应该是如果此目录下有libcom.a库文件则将此文件解压缩成.o文件释放到此目录下(经过笔者亲自测试,若此目录下没有libcom.a文件,此命令就会创建一个libcom.a库,但ar -x命令貌似没有创建库的功能,这点最终没能想通,有同学知道其原理的话欢迎指点)。

    $<变量为第一个依赖文件的名称。

    ar -rv libcom.a *.o将.o文件加入到libcom.a中。

     

    编译方法:在makefile目录下输入make all即可自动完成所有子文件编译。

       

    (二)第二个需要编译的文件是/home/vote目录下的vote.c文件,其makefile如下所示:

    .SUFFIXE:.c
    HOMEDIR=/xilinx/SamShare/APUE/vote
    COMDIR=$(HOMEDIR)/comlib
    INCDIRS=-I$(COMDIR)/include
    LIBDIRS=-L$(COMDIR)/lib
     
    LIB= -lcom 
    CC=gcc
    CFLAGS=-O 
     EDF=
      
    .c:
            $(CC) -o $@ $< $(CFLAGS) $(INCDIRS) $(LIBDIRS) $(LIB)
       #$@意为完整的目标名称。
    ~                                                                

    其各变量及命令与第一个相同,这里不多介绍,需要注意的是此处要链接.../include目录下的comlib.h头文件,以及.../lib下由第一个makefile生成的libcom.a库文件。

     

    编译方法:在makefile目录下输入make vote即可。

    展开全文
  • Makefile编译目录下文件

    千次阅读 2018-08-24 14:56:16
    编译多个c文件一般有两个功能,一个是每个c文件都有main函数,就是说每个c文件的可执行文件是独立的,各自是各自的;第二个是个c文件用来编译成一个可执行文件。   首先说第一个,内容如下,这个makefile是为了...

    个人分类: Makefile

    今天终于学会了编写makefile,使之可以编译目录下所有c\cpp文件。

    编译多个c文件一般有两个功能,一个是每个c文件都有main函数,就是说每个c文件的可执行文件是独立的,各自是各自的;第二个是多个c文件用来编译成一个可执行文件。

     

    首先说第一个,内容如下,这个makefile是为了编译opencv代码的。

    [cpp] view plain copy

    1. CFLAGS= -g -O3 `pkg-config opencv --cflags`  
    2. LIBS = `pkg-config opencv --libs`  
    3. C_SRC = $(wildcard *.c)  
    4. C_OBJ = $(patsubst %c, %o, $(C_SRC))  
    5. CPP_SRC = $(wildcard *.cpp)  
    6. CPP_OBJ = $(patsubst %cpp, %o, $(CPP_SRC))  
    7.   
    8. .PHONY:all clean  
    9.   
    10. all:$(CPP_OBJ) $(C_OBJ)  
    11.   
    12. .c.o:  
    13.     gcc $(CFLAGS) -o $@ $< $(LIBS)   
    14. .cpp.o:  
    15.     g++ $(CFLAGS) -o $@ $< $(LIBS)  
    16.   
    17.   
    18. clean:  
    19.     rm *~ *.o -f  
     
    1. CFLAGS= -g -O3 `pkg-config opencv --cflags`

    2. LIBS = `pkg-config opencv --libs`

    3. C_SRC = $(wildcard *.c)

    4. C_OBJ = $(patsubst %c, %o, $(C_SRC))

    5. CPP_SRC = $(wildcard *.cpp)

    6. CPP_OBJ = $(patsubst %cpp, %o, $(CPP_SRC))

    7.  
    8. .PHONY:all clean

    9.  
    10. all:$(CPP_OBJ) $(C_OBJ)

    11.  
    12. .c.o:

    13. gcc $(CFLAGS) -o $@ $< $(LIBS)

    14. .cpp.o:

    15. g++ $(CFLAGS) -o $@ $< $(LIBS)

    16.  
    17.  
    18. clean:

    19. rm *~ *.o -f

     

    cflags 和 libs就不说了,

    c_src和c_obj中,$(wildcard *.c, *.cpp, /***/***/*.c)是为了找出目录和指定目录下所有的后缀为c和cpp的文件,这个功能也可以使用c_src=$(shell echo *.c)实现。

    $(patsubst %cpp, %o, $(CPP_SRC))中是为了将所有的cpp文件的后缀替换为o文件,这个功能也可以通过CPP_OBJ=$(CPP_SRC:%.c=%.o)实现

    PHONY是伪目标

    all后是要生成的所有目标文件

    最后的.c.o和.cpp.o这两个,是为了通配编译c后缀和cpp后缀文件的规则。

    这样即可编译目录下所有的源文件,为各自生成可执行文件了。

    Makefile编译目录下多个文件

     

    参考网址:http://forkhope.diandian.com/post/2012-10-12/40040828841

                        http://blog.csdn.net/jernymy/article/details/6401065
                        http://hi.baidu.com/zengzhaonong/item/f07c81e1da455210585dd89a


    第二个是编译所有c文件,生成一个目标文件。有了上一个的基础,第二个目标的例子为

    [cpp] view plain copy

    1. 01 CC = gcc  
    2. 02 LD = gcc  
    3. 03 CFLAGS = -Wall -c -Dgliethttp -I../include -L lib_path  
    4. 04 LDFLAGS = -lpthread  
    5. 05   
    6. 06 SRCS = $(wildcard *.c source/*.c)  
    7. 07 OBJS = $(patsubst %c, %o, $(SRCS))  
    8. 08 TARGET = gliethttp  
    9. 09   
    10. 10 .PHONY: all clean  
    11. 11   
    12. 12 all: $(TARGET)  
    13. 13   
    14. 14 $(TARGET): $(OBJS)  
    15. 15     $(LD) $(LDFLAGS) -o $@ $^  
    16. 16   
    17. 17 %o: %c  
    18. 18     $(CC) $(CFLAGS) -o $@ $<  
    19. 19   
    20. 20 clean:  
    21. 21     rm -f *.o $(TARGET)  
    展开全文
  • Makefile编译多文件

    千次阅读 2018-08-16 17:09:06
    all:easy_select tcp_select .PHONY:all easy_select:easy_select.c gcc $^ -o $@ tcp_select:tcp_select.c gcc $^ -o $@ ... # tab命令 #指定如何从依赖文件生成目标文件  # make指令的时候...
       all:easy_select tcp_select
       .PHONY:all
       easy_select:easy_select.c
           gcc $^ -o $@
       tcp_select:tcp_select.c
           gcc $^ -o $@
    

     目标:依赖文件
       # tab命令       #指定如何从依赖文件生成目标文件
       # make指令的时候,寻找Makefile文件的第一个目标,并生成它,这时,如果该目标
       # 所依赖的文件不存在,则该依赖文件作为目标,继续寻找
       # . PHONY 伪目标
       # $^代表所有依赖文件·
       # $@代表目标文件
       # $<代表第一个依赖文件


    展开全文
  • 原地编译比较简单,但是会污染源码,目录里会出生成的.o文件,并且编译不同配置的目标文件,都要先清除之前的.o文件。 单独输出文件夹编译编译指定输出目录,在编译的时候所有生成的.o文件或生成的其他文件...
  • PRJ_HOME := $(shell pwd) PRJ := car VERSION := 1.0.0.0 NAME_LIB := libu.a DIR_LIB := $(PRJ_HOME)/lib DIR_OBJ := $(PRJ_HOME)/obj DIR_INC_CUR_BPS := $(PRJ_HOME)/bpslib DIR_INC_CUR := ./ ...
  • 这是一个makefile的范例,用于编译多文件夹,多文件编译; 代码简洁,容易解理,能自动检查头文件依赖关系,支持不同文件夹下面有相同的文件名的.c文件
  • 要从foo.c构建foo.o,在本地:foo.o: foo.c$(CC) -c $< -o $@要做同样的事情,但在src /需要任何头文件:... -o $@要做同样的事情,但使用src /的源文件:SRC := srcfoo.o: $(SRC)/foo.c$(CC) -I$(SRC) -c $<...
  • 文件夹中有许多文件一起编译时我们通常会将makefile文件写成遍历模式,如下所示: .PHONY:clean all all: @for x in `find ./ -maxdepth 2 -mindepth 2 -name "Makefile" `; \ do cd `dirname $$x`; if [ $$?...
  • makefile编译目录文件 自动生成编译目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...
  • 首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译...意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文件直接复制到相应目录即可方便编译出所有文件。这些makef...
  • CC = gcc CFLAGS = -Wall -g BIN = ACS D_OBJ=./obj SUBSRC = $(shell find $(shell pwd) -name ‘*.c’) SUBOBJ := (patsubst(patsubst %.c,%.o,(patsubst(SUBSRC)) OBJ_O = $(addprefix (DOBJ)/,(D_OBJ)/,(DO​BJ)...
  • linux 工程编译 makefile 工程目录下所有的C文件,工程目录下可以有子目录
  • 然后使用Makefile的$(filter-out)不编译一部分代码,但是发现并没有剔除 ##modules sdk SDKFILES += $(wildcard IDMSdk/*.cc) CXXSRCS += $(filter-out IDMSdk/idm_uwb*.cc, $(SDKFILES)) 经分析,有可能是需要...
  • Linux-基础入门-学习笔记(2):交叉编译工具链与Makefile 一、安装交叉编译工具链 1. windows和linux下装软件的特点 windows下装软件的特点 Windows中装软件使用安装包,安装包解压后有2种情况:一种是一个安装文件...
  • makefile c/c++ 生成可执行文件
  • 先获得所有文件,然后用filter-out 过滤 FILES := $(wildcard $(PATH)/src/*.cc) SRC_FILES += $(filter-out $(PATH)/src/a.cc $(PATH)/src/b.cc, $(FILES))  
  • 这个makefile,在linux环境下可以编译当前目录下所有.c文件,可以把它们编译为可执行文件,或库文件。又通用,又简单.
  • 如何将生成的.o文件放到指定文件夹 #目标文件名 target = smartRoom #编译工具链 cc := arm-linux-gnueabihf-gcc #链接库的文件路径、头文件路径与要链接的库 PI_LIB_PATH := -I /home/lgb/piLib/piInclude/...
  • linux下C++多文件夹编译的万能makefile TARGET:= main CFLAG:= -I./include #编译参数 可以指定头文件的外在加载路径,include是存放头文件得到文件夹 source:= $(wildcard ./src/*.cpp) #先获取src下面的所有...
  • make指定文件编译 make -f makefilename make -f makefile.name clean
  • Makefile嵌套编译多文件项目

    千次阅读 2018-04-07 16:48:32
    一个工程的源文件比较,其按类型、功能、模块分别放在若干个目录,为了项目更加规整,我们常常要将源文件头文件执行文件等分开,所以在编译Makefile时就要做好整个项目的编译准备工作,Makefile定义了一系列的...
  • 转载自别人文章 –目录结构 wrm@wrm-ruijie:~/test/fuping$ ls debug demo Makefile porting src ...#debug文件夹里的makefile文件需要最后执行,所以这里需要执行的子目录要排除debug文件夹,这里使用awk排除了deb
  • 多文件夹下的Makefile自动编译

    千次阅读 2015-07-07 10:25:11
    时候我们可能会遇到这样的情况:要编译多个目录下的代码,然后要将中间文件和执行文件分别放到不同的文件夹下面。好吧,贴图的排版第一次用,将就看一下。下面的图是我练习用的一个项目文件结构图。其中bin用来...
  • 环境:centos7 ...写.c程序:在测试目录test写四个h头文件申明的函数的实现。 add.c int add(int a, int b) { return a + b; } sub.c int sub(int a, int b) { return a - b; } mul.c int mul(int
  • ######### Makefile COMMON ######## #c 还是 c++ EXTENSION = c #gcc 还是 g++ CC = gcc #生成的可执行文件名 EXE = main #源文件路径 空格 可以继续添如 src src1 src2 SUBDIR = src #.o文件存放路径 OBJ = obj #....
  • 这个项目个.h头文件和.c源文件,利用makefile可以很轻松地找到所有项目文件之间的关系并实现编译。虽然makefile的基本框架学校已经提供的,但身为c语言小白,连如何利用make指令来使用这份makefile都不知道,...
  • 若是需要多文件编译或者需要分别设置Include头文件夹、Source资源文件夹(如下图),则需要修改配置三个.json文件(tasks.json、launch.json、 ) 注:个人习惯将.h头文件放到Include目录、.c.cpp源文件放到Source...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,521
精华内容 9,808
关键字:

使用makefile实现指定文件夹中多文件编译