【问题标题】:Compile all C files in a directory into separate programs将一个目录下的所有C文件编译成单独的程序
【发布时间】:2011-02-11 23:02:14
【问题描述】:

有没有办法使用 GNU Make 将目录中的所有 C 文件编译成单独的程序,每个程序都被命名为源文件,没有 .c 扩展名?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:
    SRCS = $(wildcard *.c)
    
    PROGS = $(patsubst %.c,%,$(SRCS))
    
    all: $(PROGS)
    
    %: %.c
    
            $(CC) $(CFLAGS)  -o $@ $<
    

    【讨论】:

    • @Martin 太棒了!但是我不明白你为什么不在主线中调用 PROGS 和 SRCS。
    • @user4050,对不起,我错过了你的问题。默认的all 目标构建$(PROGS),主行说如何构建没有扩展名的文件,这就是$(PROGS),来自%.c 文件,这就是$(SRCS)
    【解决方案2】:

    我认为您甚至不需要 makefile - 默认的隐式 make 规则应该这样做:

    $ ls
    src0.c  src1.c  src2.c  src3.c
    $ make `basename -s .c *`
    cc     src0.c   -o src0
    cc     src1.c   -o src1
    cc     src2.c   -o src2
    cc     src3.c   -o src3
    

    经过编辑使命令行更简单。

    【讨论】:

      【解决方案3】:
      SRCS = $(wildcard *.c)
      
      PROGS = $(patsubst %.c,%,$(SRCS))
      
      all: $(PROGS)
      
      %: %.c
              $(CC) $(CFLAGS) -o $@ $<
      clean: 
              rm -f $(PROGS)
      

      通过添加“干净”目标来改进 Martin Broadhurst 的答案。 "make clean" 将清除所有可执行文件。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      相关资源
      最近更新 更多