- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Visual Studio 2008 在 C++ 中将一个复杂的项目作为库包含在内。
我有一组包含文件,它们分散在一个非常复杂的目录树结构中。树的根有大约十个目录,然后每个目录可以有多个子目录、子子目录等。
我知道该结构中的所有头文件都是必需的,而且它们无可救药地相互关联;我不能只包括一个目录,因为那样的话另一个目录中的依赖项会被遗漏并导致编译器因未被邀请参加聚会而崩溃。因此,每个人都必须包括在内。
我可以通过在项目中一次添加一个目录(右键单击->属性->附加包含目录)来做到这一点,但这可能充满痛苦,尤其是当其中一个依赖项有子项并创建一个全新的子目录。
有没有办法在头文件本身中指定一个包含目录,这样我就可以在需要使用它包含的函数时只包含该头文件?这样,我就可以更轻松地编辑包含文件,而且我不必确保调试版本和发布版本彼此一致(因为属性右键单击默认为当前版本,而不是所有版本,a从调试切换到发布时导致大量崩溃的功能)。更好的是,有没有办法指向根目录并强制递归包含所有内容?
编辑到目前为止所有这些回复:
我不能编辑这个项目的结构。我只能链接到它。与其他人相比,我不喜欢代码的组织方式,但我必须在这种约束下工作。与其在容易出错的过程中花费数小时来查找所有相互依赖关系并将它们放入项目文件,不如以编程方式执行此操作?
最佳答案
这显然不是一个好主意,真的。
这些目录是按逻辑组组织代码的一种方式。
/web
/include
/web
/stackoverflow
/language-agnostic
/algorithm
/database
/meta
/bug
/feature-request
/src
/local/
/include
/local
/my-favorites
/src
现在如果我输入
#include "exception.h"
我到底想包括什么?那个文件在哪里?我怎样才能看到它的内容?
另一方面,如果我输入
#include "local/my-favorites/exception.h"
然后就很清楚了。 (我只有两个 include -Iweb/include -Ilocal/include)
这样,我可以拥有多个名称完全相同的文件,并且不会出现歧义,当您希望集成两个都具有此类“exception.h”的不同第 3 方库时,这非常好。
另请注意,为清楚起见,命名空间嵌套应反射(reflect)目录组织。这样
file: "web/include/web/meta/bug/exception.h"
namespace web { namespace meta { namespace bug {
struct exception: std::runtime_error {};
} } } // namespace bug, namespace meta, namespace web
通过这种方式,很容易想到在需要一个类时必须包含什么标题。
另请注意,例如,如果您查看 boost,它们会在每个目录中为“懒惰”程序员放置 header ,其中包括所有子目录的 header
file: "web/include/web/meta/bug.h"
#include "web/meta/bug/file1.h"
#include "web/meta/bug/file2.h"
#include "web/meta/bug/file3.h"
#include "web/meta/bug/file4.h"
#include "web/meta/bug/file5.h"
file: "web/include/web/meta.h"
#include "web/meta/bug.h"
#include "web/meta/feature-request.h"
这些包含还可以使用 using 指令将名称“拉”到更通用的命名空间中:
namespace web { namespace meta {
using ::web::meta::bug::bug;
} } // namespace meta, namespace web
减轻开发人员的痛苦。
正如您所看到的,该语言已经为您提供了一种非常好的方式来清晰地组织您的代码,如果您使用“全部包含”选项,您最终只会遇到无法维护的困惑:
#include "exception.h"
#include "bug.h"
#include "myString.h"
#include "database_connect.h"
#include "helper.h" // really love this one...
#include "file.h" // not bad either eh ?
我在工作中遇到过其中的一些......当你依赖 25 个以上的组件时,想想 20 个不合格的包含......现在,你认为有可能删除对组件 X 的依赖吗? ;)
编辑:如何处理第 3 方库?
有时第 3 方库不符合您的期望,无论是:
您始终有机会将它们包装在您自己的 header 中。
例如,假设我有:
/include
/file1.h
/file2.h
/detail
/mustInclude.h
/exception.h
任何时候你想包含一个文件,你必须在之前包含'exception.h'和'mustInclude.h',当然你会遇到很难发现包含的文件来自这个第三个的问题派对库,而不是您自己的(当前)项目。
好吧,只是包装:
/include
/3rdParty
/file1.h (same name as the one you would like to include, it's easier)
file: "/include/3rdParty/file1.h"
#pragma push
// ignore warnings caused
#include "detail/exception.h" // necessary to include it before anything
#include "file1.h"
#include "detail/mustInclude.h"
#pragma pop
然后在你的代码中:
#include "3rdParty/file1.h"
您刚刚隔离了问题,现在所有的困难都在您的包装文件中。
注意:我只是意识到您可能会遇到第 3 方 header 相互引用而不考虑“相对路径”的问题,在这种情况下,您仍然可以避免“多重包含”综合症(即使没有版本),但这可能是不幸的。
我想你没有机会不使用这样的垃圾 :x ?
关于c++ - VS2008 C++ : how can I make recursive include directories?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590148/
当我尝试构建我的项目时,我遇到了这样的错误: FAILURE: Build failed with an exception. * What went wrong: Execution failed
我正在尝试从 Here 构建适用于 linux 3.7 内核的 Mali 驱动程序. 有一个单独的构建脚本,例如, #!/bin/bash export KDIR=/path/to/kernel/di
有没有一种方法可以使用普通的 lisp 创建目录。我想先创建一个文件夹,然后将我的 .txt .png 文件放入其中。我知道首先我可以在外部创建文件夹,然后使用 with-open-file 等在目录
Visual Studio 提示每次编译警告 MSB8029:中间目录或输出目录不能位于临时目录下,因为它可能导致增量构建出现问题。 我正在检查项目并更改了输出目录和中间目录,但我仍然在我的解决方案中
Visual Studio 提示每次编译警告 MSB8029:中间目录或输出目录不能位于临时目录下,因为它可能导致增量构建出现问题。 我正在检查项目并更改了输出目录和中间目录,但我仍然在我的解决方案中
我的客户安装了 Keycloak 以从 AWS Cognito 代理用户。 我需要这个 Keycloak 来代理来自 Azure Active Directory 的用户。 客户拥有 AAD 的 OF
我想从 macOS 上 parallel 命令的所有潜力中受益(似乎存在 2 个版本,GNU 和 Ole Tange 的版本,但我不确定)。 使用以下命令: parallel -j8 find {}
我需要实现一个 Active Directory(本地)管理器,用户可以在其中执行所有任务,例如添加用户、删除用户、分配许可证和分配组等。用户有用户名、密码和域 Controller 名称,所以他只需
我正在编写一个使用PHP adLDAP库与Active Directory交互的应用程序。 为了测试该应用程序,我需要使用Active Directory架构的本地LDAP DB以及示例数据。 我已经
我有一个包含两个域 AA.RR.COM 和 BB.RR.COM 的 Active Directory 林,其中包含用户和组。我需要搜索两个域中的用户,同时查询其中一个域(例如 AA.RT.COM)如何
我使用 Proxy-Address 属性作为确定用户电子邮件地址的主要方法(我只关心以“SMTP:”或“smtp:”为前缀的地址,此外,我使用以大写字母为前缀的地址SMTP 来确定主地址 - 这不是
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
所以我有一个目录 - 让我们说/dir/。在里面我有这些文件夹-/目录/fold1//目录/fold2//dir/fold3/ 这些文件夹 (fold1,2,3) 中的每一个都可能包含一个名为 foo
我正在使用 PHPmotion 在我本地的 ubuntu 机器上。 优步上传者在 phpmotion 中用于将文件上传到服务器。这是使用 perl 脚本(位于“ www/cgi-bin ”)上传文件。
我正在为我的公司开发一个基于 Web 的 Intranet。我只想知道用户使用事件目录登录详细信息登录应用程序是一件好事,还是我应该与应用程序数据库一起创建登录名。如果有什么比这更好的,请提出建议。这
我们有带有 AD 模块 1.0.4 的 Sitecore 6.5。 DEPARTMENT\SitecoreUsers AD 组中的用户可以登录 Sitecore,但 DEPARTMENT\Siteco
我使用的 AD 设置具有存储为(多个)安全组成员的用户。 我正在使用读取用户的 memberof 属性的软件来计算访问权限。 在 AD Explorer 中,我可以看到用户的 memberof 属性显
我们有一个在 .NET 上编写的 SaaS 应用程序,我们需要为我们的客户提供各种 SSO 方法。 不久前,我们对 OpenID 进行了标准化,希望这会成为一个通用标准,让我们不必支持不同的标准。不幸
我有 .Net 代码可以读取/写入我们本地的 Active Directory 域。阅读部分已经过测试并且工作正常,但我想测试“写作”部分。我的应用程序将修改事件目录中的一些用户配置文件,但我不想在实
我正在运行一个 ASP.NET 4.0 应用程序,它使用用户名(即 HttpContext.Current.Request.LogonUserIdentity.Name.ToString())来管理对
我是一名优秀的程序员,十分优秀!