有没有人知道通过扫描源文件的目录来生成makefile的工具?
可能天真:
答案 0 :(得分:8)
你可以写一个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才能生效)。
(请注意,我不能流利地使用Makefile
,所以也许这可以更轻松。)
答案 1 :(得分:7)
CMake做到了,它甚至创建了makefile和Visual Studio项目。 http://www.cmake.org/
您需要做的就是创建一个包含以下行的CMakeLists.txt文件:
file(GLOB sources *.h *.c *.cxx *.cpp *.hxx)
add_executable(Foo ${sources})
然后进入一个干净的目录并输入:
cmake /path/to/project/
这将在该干净的构建目录上创建makefile。
答案 2 :(得分:5)
这是我用于简单项目的内容:
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的可执行文件。然后其中一个源文件应命名为myApp.cpp(这是我放置main的地方)。
答案 3 :(得分:3)
有一个非常古老的脚本叫做'makedepend',用来制作非常简单的makefile。我已经切换到了几乎所有的cmake。
这是wiki文章http://en.wikipedia.org/wiki/Makedepend,请注意底部的替代品列表,包括automake中的depcomp和gcc中的-M标志。
编辑:正如有人在另一个问题中向我指出的那样,gcc -MM *.cpp > Makefile
产生了一个相当不错的简单makefile。您只需要添加CPPFLAGS和构建整个二进制文件的规则...将采用以下形式:
CPPFLAGS=-Wall
LDFLAGS=-lm
all: binary_name
binary_name: foo.o bar.o baz.o biff.o
答案 4 :(得分:1)
- 无需检测外部依赖性
- 使用默认编译器/链接器设置
为什么选择脚本呢?前提是您的所有项目源文件都是*.cpp
并且位于当前目录中:
all: $(notdir $(CURDIR))
$(notdir $(CURDIR)): $(subst .cpp,.o,$(wildcard *.cpp))
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
Makefile会使用默认编译器/链接器设置将所有源文件构建到以当前目录名称命名的可执行文件中。
否则,我通常建议人们尝试SCons,而不是在更简单直观的地方尝试。添加了奖励,无需手动编码clean
目标,内置源/头依赖项检查,它本身是递归的,并支持正确的库。