c++ - Project-Euler(Make/Source)有用的文件夹结构吗?

标签 c++ c makefile

我目前正在尝试为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/

相关文章:

c - 这是跨翻译单元内联函数的合理技巧吗?

c - 向进程中的所有线程发送信号

c - 我应该使用什么 : strcpy or pointers?

c++ - Make with Autodependencies for C++

makefile - make 文件的编译器标志继续

c++ - std::string 上的段错误

c++ - 刚开始编写 C++

c++ - 从对象指针调用重载运算符()

c++ - 将 Visual Studio 编辑器嵌入到我的应用程序中

qt - 在 qmake 中添加自定义目标