如何更好的在 c++各个 project 共享代码

2018-09-19 11:37:11 +08:00
 v2byy

使用 visual studio 做 c++开发。

如:

Project A: |_a.h |_a.cpp

Project B: |_b.h |_b.cpp |_a.cpp //在 vc directory 将 Project A 目录 include 进来,然后将 a.cpp add 进来

想过用 Shared items project,但是不太适合我的一种场景,比如还有一个 Project C,然后 Project B 是一个 dll,Project C 依赖于 B,则 B,C 不能同时 reference A,会造成符号已定义的链接问题。

有没有更好的方法?

2556 次点击
所在节点    C
9 条回复
wutiantong
2018-09-19 11:54:47 +08:00
static/shared library, compile & link 这些基本概念搞清楚先?
v2byy
2018-09-19 12:03:26 +08:00
@wutiantong 有什么问题,请指教一下
GeruzoniAnsasu
2018-09-19 12:41:52 +08:00
把重合的代码拆出来作为单独的子项目,不要局限于现有的文件结构,代码结构产生了麻烦就应该主动拆分文件


手上项目是一个 python 套 c 套 c 套 c++套 c 套 c (指 git submodule 层级)的项目,也没产生什么依赖问题

然后你说的 c 依赖 b 导致 a 重复引用的问题照理来讲应该不可能存在,a 编译出的代码被 b 引用也被 c 引用并不会产生什么问题啊,这不是很正常吗
wutiantong
2018-09-19 13:03:18 +08:00
@v2byy 问题就是你没有把你的问题表达清楚。
Abercrombie
2018-09-19 13:23:49 +08:00
确实没有描述清楚
如果就按照你的描述 文件这么少的 toy project 根本不需要用到依赖( dependence )直接项目 B 包含四个文件编译就行了
如果是大项目 把需要共享的部分高度抽象化做成工具类 或者打包成.so 和头文件
wutiantong
2018-09-19 15:39:54 +08:00
basically, you need to learn this: https://en.wikipedia.org/wiki/Make_(software)
v2byy
2018-09-19 16:16:44 +08:00
@wutiantong 恩,编写 makefile 其实跟我现在描述的方式无本质差别。makefile 也是相当于将源文件 include 进来,跟直接使用 visual studio 包含路径是一样的。
gnaggnoyil
2018-09-19 17:39:49 +08:00
自己手动改动 sln 和 vcproj.这俩里面都是 XML 的内容,语义很清晰.
smol
2018-09-19 17:59:02 +08:00
是这个意思么:你 B 通过源码包含了 A,C 也通过源码包含了 A,现在 C 链接到 B,结果提示 A 的符号冲突。
就事论事的办法:B 既然封装成库,就要详细规划 B 的接口,不要把 A 的东西暴露出来。这样 C 链接到 B 是就不会提示冲突。
更好的办法是:详细梳理你的各模块依赖,将接口进行合理设计,而不是这种胡乱包含,包的管理其实与语言无关,更多是一种逻辑能力。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX