我目前正在尝试为Project-Euler
想出一个可靠的文件夹结构。 .
我目前的想法是这样的结构:
.
└── project-euler/
├── resources
│ ├── primes.h
│ ├── primes.c
│ ├── factors.h
│ ├── factors.c
│ └── ...
├── 001_name_of_procect_one.c
├── 001_name_of_project_one.o
├── 002_name_of_project_two.c
├── 002_name_of_project_two.o
└── ...
我对这种结构的问题是,我将所有项目都放在一个文件夹中,但我不知道如何编写 Makefiles
对于这种结构。
我可以为每个项目创建一个单独的目录,但随后我必须编写类似 #include "../resources/primes.h"
的内容而且我不喜欢这种方法。
在这种情况下使用的典型项目结构是什么?我怎样才能写一个Makefile
对于所有小项目,同时仍将它们保留在同一目录中?
编辑:我使用 clang
顺便说一下。
最佳答案
如果将实用程序文件保存在 resources
子目录中,则可以在主目录中创建单独的解决方案文件,其中在顶部包含必要的头文件,例如:
#include "resources/primes.h"
并在底部包含实际代码
#include "resources/primes.c"
这样,您甚至不需要 Makefile
,因为默认规则将允许您直接从相应的源文件创建每个目标:
make 002_name_of_project_two
make 甚至不会生成目标文件,而只会生成可执行文件。
我个人更喜欢项目文件的较短名称,例如p42.c
Makefile
对于点击 make
或 IDE 的构建按钮仍然有用。一个衬垫就足够了:
all: p42
但是您可能想要添加一些依赖项,以便仅在更改实用程序源时重新编译您的目标。添加这些行:(在第二行开头有一个 TAB)
%: %.c $(wildcard resources/*)
clang $(CFLAGS) $(LFLAGS) -o $@ $<
您仍然应该向 CFLAGS
环境变量添加适当的选项,以利用编译器捕获愚蠢错误的能力:-Wall -Wextra -Werror
for gcc
和 -Weverything
用于 clang
。
关于c++ - Project-Euler(Make/Source)有用的文件夹结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485248/