c++ - 添加 additional-include-directory 和 reference => 指向一个设置中的静态库

标签 c++ visual-studio-2015

我有一个应用程序项目 (MyGame),它希望在同一个解决方案中访问静态库 (MyLib) 中的所有内容:-

MyVisualSolution
- MyLib (static library)  : 200  .h & .cpp
- MyGame (win32 app)      : 100  .h & .cpp

实现上述要求的步骤是:-

  1. 设置MyGame项目属性> 在MyLib 中添加附加包含目录 = .h 文件夹
  2. 在解决方案资源管理器中,单击MyGameReferences,然后单击复选框MyLib

我必须执行这两个步骤,并且设置在非常不同的地方。
我认为它乏味、肮脏、不直观且容易出错。

有什么方法可以在 Visual Studio 中的一个地方完成吗?
我希望只做一件类似于第二步的事情。

(感觉property sheet可能是最接近的答案,但还是解决不了。)

据我搜索,没有。 (visual c++: #include files from other projects in the same solution)

最佳答案

这可能不是一个完整的答案,但对于评论来说太长了:我们有多个项目,每个项目都有多个静态和动态库项目以及多个应用程序。为了最大限度地减少配置,我们决定采用清晰的项目结构、一些约定,以及所有执行上述结构和约定的项目的通用属性表。设置它花了一些时间,但最终还是值得的。

项目结构(简化)是:

maindir \
        _bin \
        _lib \
        build \
               paths.props
               linker.props
               compiler.props
               default.props
               maindir.user.props
               autolink_template.h
        projectA \
                  projectA.h
                  autolink.h
        projectB \
                  tests \
                  projectB \
                           projectB.h
                           autolink.h

_bin 是所有 dll/exe 所在的位置。我们可能会根据平台/配置组合使用子目录,或者在输出名称上使用后缀,例如用于 Debug|Win32 构建的 projectA_x86d.exe。这都是在属性表中设置的(我们的项目基本上从不对设置进行任何修改,它们只包含源/包含文件并从构建目录导入属性表)

_lib 是导入库和静态库所在的位置。同样,在名称上使用子目录或后缀。

build 具有所有公共(public)属性表。一个普通的项目只包含 default.props,它会自动判断一个 exe/lib/dll 是否基于 $(ConfigurationType) 构建,并根据它包含其他属性表。有用于将输出路径设置为 _lib 和 _bin 的属性表,搜索路径以便链接器找到 _lib 目录,添加 maindir 以包含搜索路径,甚至诸如基于 git hash 等设置文件版本之类的东西,...如果一个 .user .props 发现它也被导入,这允许与 maindir 相关的自定义设置。

对于包含文件,我们总是使用#include 而不是 . Imo 这更清楚并且减少了名称冲突的机会。如果项目有单独的测试/源目录,如 projectB,调整 maindir.user.props 以将 maindir/projectB 添加到包含路径,因此我们仍然可以使用 #include

为了设置链接,每个 lib 项目中都有一个 autolink.h,它有一个 #pragma comment(lib, "projectA.lib")(从构建目录中的模板创建),因此要链接到该 lib 另一个项目必须 #include 。

现在这对你来说可能有点过分了,但你可能会得到一些适合你的特定情况的想法。

关于c++ - 添加 additional-include-directory 和 reference => 指向一个设置中的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43086433/

相关文章:

c++ - 我可以在不创建结构实例的情况下获得结构字段的大小吗?

c - 获取函数未定义

c++ - Vulkan 创建实例 VK_OUT_OF_HOST_MEMORY

unit-testing - 在VS 2015测试资源管理器中使用 'Run All'时,为什么NUnit测试时间变慢?

c++ - pthreads SIGHUP on Simple Linux Timer

c++ - 从对话框项中获取资源 ID

c++ - 在编译时动态创建映射

c++ - 枚举注册表项 C++

android - 无法在 Visual Studio 2015 中创建新的空白应用 (Android)

android - 如何减少 Visual Studio 2015 中 Xamarin Forms 应用程序的用户代码大小?