代码之家  ›  专栏  ›  技术社区  ›  StackedCrooked

简单的makefile生成工具?

  •  7
  • StackedCrooked  · 技术社区  · 14 年前

    有没有人知道一个工具可以通过扫描源文件的目录来生成makefile?

    • 无需检测外部依赖项
    • 使用默认编译器/链接器设置
    6 回复  |  直到 14 年前
        1
  •  9
  •   mtvec    14 年前

    你可以写一个 Makefile 为你做的是:

    SOURCES=$(shell find . -name "*.cpp")
    OBJECTS=$(SOURCES:%.cpp=%.o)
    TARGET=foo
    
    .PHONY: all
    all: $(TARGET)
    
    $(TARGET): $(OBJECTS)
            $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
    
    .PHONY: clean
    clean:
            rm -f $(TARGET) $(OBJECTS)
    

    只需将它放在源层次结构的根目录中并运行 make (你需要 GNU Make

    (注意我的英语不流利 所以这可能更容易些。)

        2
  •  7
  •   tibur    14 年前

    http://www.cmake.org/

    你所需要做的就是创建一个CMakeLists.txt文件包含以下行的文件:

    file(GLOB sources *.h *.c *.cxx *.cpp *.hxx)
    add_executable(Foo ${sources})
    

    cmake /path/to/project/
    

    它将在干净的生成目录上创建makefile。

        3
  •  5
  •   Loki Astari    9 年前

    这是我在一个简单的项目中使用的:

    CC               = $(CXX)
    CXXFLAGS        += -ansi -pedantic -W -Wall -Werror
    CPPFLAGS        += -I<Dir Where Boost Lives>
    
    
    SOURCES          = $(wildcard *.cpp)
    OBJECTS          = $(patsubst %.cpp,%.o,$(SOURCES))
    
    all:             myApp
    myApp:           $(OBJECTS)
    

    唯一的限制是,如果您正在构建一个名为myApp的可执行文件。然后应该命名其中一个源文件我的应用程序.cpp(这是我放置main的地方)。

        4
  •  3
  •   jkerian    14 年前

    有一个非常古老的脚本叫做“makedepend”,它用来生成非常简单的makefile。从那以后,我几乎所有的事情都转到了cmake。

    这是维基的文章 http://en.wikipedia.org/wiki/Makedepend ,注意底部的备选方案列表,包括automake中的depcomp和gcc中的-M标志。

    编辑:有人在另一个问题上向我指出, gcc -MM *.cpp > Makefile

    CPPFLAGS=-Wall
    LDFLAGS=-lm
    all: binary_name
    binary_name: foo.o bar.o baz.o biff.o
    
        5
  •  1
  •   Dummy00001    14 年前
    • 无需检测外部依赖项

    为什么要写剧本?前提是您的所有项目源文件 *.cpp 在当前目录中:

    all: $(notdir $(CURDIR))
    $(notdir $(CURDIR)): $(subst .cpp,.o,$(wildcard *.cpp))
            $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
    

    Makefile将所有具有默认编译器/链接器设置的源文件构建到以当前目录名命名的可执行文件中。

    SCons clean 目标,源/头依赖性检查是内置的,它是本机递归的,并适当地支持库。

        6
  •  0
  •   Community CDub    8 年前

    如链接的 discussion 可以生成漂亮的makefile,搜索依赖项并将文件包含在您告诉它的目录中。在windows上,您需要安装MinGW和Ctags。在Linux下,gcc和ctag最有可能出现。它是开源的,可以免费使用。

    特别是,在为某个大型项目的某些已有模块生成单元测试时,如果内聚性不好,那么这一做法很容易节省您几个小时甚至几天的时间。