我还是UNIX/Linux世界的新手,尤其是相关工具,比如GCC编译器.也就是说,我仍然是makefiles和类似的东西的新手(我在Windows上使用MinGW),因为到目前为止,我的大多数开发都是使用像Visual Studio和Eclipse这样的IDE.
当我打开一个典型的项目文件夹时,我看到这样的文件:
configure
make
INSTALL
install-sh (or a variant)
Run Code Online (Sandbox Code Playgroud)
这里有很多我不理解的东西,我的主要问题是:
这些之间有什么区别,为什么我们需要每一个?(在IDE世界中,你所拥有的只是一个项目文件;就是这样.所以我很困惑为什么我们这里不仅仅是一个makefile.)
这些文件是如何生成的?对于小型项目,您可以手工编写它们,但对于像GCC这样的大型项目,即使尝试也是荒谬的.我发现编辑这些文件很痛苦,我得出的结论是我不应该手动修改它们.但如果是这样,那么人们通常使用哪些工具来添加和修改这些文件?
为什么他们不在makefile中使用通配符?为什么每个目标文件都有一行?这是因为限制,还是有优势?
拥有一个调用编译器的shell脚本和每个文件,以及一个makefile做同样的事情有什么区别?在Windows中,我很想在文件夹中创建批处理文件,并使用它编译所有内容 - 不需要只有一个文件.有什么不同?为什么不只是一个.sh文件,编译一切?
奖金问题:
make工具不接受彼此的格式......我怎么知道使用什么?GCC只是通常的工具,还是每个人都应遵循一些标准?我可能会有更多问题,因为我对这类项目的结构有了更多了解,但就目前而言,这些是我最大的问题.:)
背景:
我对Make还是比较陌生,因此我开始为我最近制作的Othello游戏构建makefile。我当前的makefile比较简单。但是,我希望进一步完善它并添加构建和存档功能。
问题1:为什么不打扫工作?
问题2:对于归档,我打算使用
# tar cvzf *.o Othello
Run Code Online (Sandbox Code Playgroud)
存档时,将编译时生成.o和可执行文件。这是一种好的标准做法还是有更好的方法呢?
问题3:对于构建部分,我计划使用./Othello运行可执行文件,这是在Makefile中进行构建的最佳实践吗?
git存储库发布在下面,谢谢您的时间
全部:奥赛罗
Othello: main.o Myothello.o space.o game.o
clang++ main.o Myothello.o space.o game.o -o Othello
main.o: main.cc
clang++ -c main.cc
game.o: game.cc
clang++ -c game.cc
Myothello.o: Myothello.cc
clang++ -c Myothello.cc
space.o: space.cc
clang++ -c space.cc
clean:
rm -f *.o core *.core
rm MyOthello
Run Code Online (Sandbox Code Playgroud)