您可以为一个 DLL 创建多个 header 文件吗?您可以合并 header 个文件吗?

Can you create multiple header files for a DLL? Can you consolidate header files?

背景:我以 Project Euler 为借口来测试各种 C++ 功能并查找我的知识漏洞。我有一个项目可以创建一个可执行文件来解决各种数学问题。它变得笨拙,我将问题分解为单独的可执行文件。许多数学函数在一些问题中是 re-used。

首先:我想创建一个带有数学辅助函数的 DLL 文件。与其为整个 dll 提供一个 mathhelp.h 文件,我更愿意有几个单独的 .h 文件,例如primes.hcartesian.h 等/每个都提供对 dll 中单独命名空间的访问。

这可能吗?

其次: 另外,我 do 想要一个单独的 mathhelp.h 文件用于那些足够大的项目,他们只需要访问每个辅助函数不包括五十个单独的 headers。如何做到这一点的答案是:

但是这个答案给了我一个 follow-up 问题:如果在一个可执行项目中,我从 DLL 项目中包含以下 header:

#ifndef MATHHELP_H
#define MATHHELP_H
#include "primes.h"
#include "cartesian.h"
#endif

...如果我在可执行项目中也没有 primes.h,那将如何编译? pre-compiler 不会到达第一个 #include 并因为我在项目中没有 primes.h 而窒息吗?

当您向用户提供编译 API 的 c++(假设它是在 .dll 文件中编译的)时,您应该在 .dll 文件旁边还提供 .h 文件(包含用于编译 .dll 的所有 header)和 .lib 文件(包含从 .dll 导出的符号)。 现在假设您的用户拥有可执行文件 a.exe,并且想要使用您编译的 API。通常你会为他们提供一个看起来或多或少像这样的文件结构:

include / primes.h
          cartesian.h
          mathhelp.h

lib     / Api.lib

bin     / Api.dll

当外部可执行文件使用您的代码时,他需要在编译过程中添加外部标志,例如:-I/pathToInclude -L/PathToLib -l/yourLibrary(您需要检查确切的语法)。 在你的代码中你会有这样的东西:

#ifndef MATHHELP_H
#define MATHHELP_H
#include <primes.h>
#include <cartesian.h>
#endif

在这种情况下,编译器将首先在当前目录中查找(他不会在其中找到 headers),然后在由 -I 标志指定的文件夹中查找(他将在其中找到找到你的 headers).