使用 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,会造成符号已定义的链接问题。
有没有更好的方法?
1
wutiantong 2018-09-19 11:54:47 +08:00
static/shared library, compile & link 这些基本概念搞清楚先?
|
2
v2byy OP @wutiantong 有什么问题,请指教一下
|
3
GeruzoniAnsasu 2018-09-19 12:41:52 +08:00
把重合的代码拆出来作为单独的子项目,不要局限于现有的文件结构,代码结构产生了麻烦就应该主动拆分文件
手上项目是一个 python 套 c 套 c 套 c++套 c 套 c (指 git submodule 层级)的项目,也没产生什么依赖问题 然后你说的 c 依赖 b 导致 a 重复引用的问题照理来讲应该不可能存在,a 编译出的代码被 b 引用也被 c 引用并不会产生什么问题啊,这不是很正常吗 |
4
wutiantong 2018-09-19 13:03:18 +08:00
@v2byy 问题就是你没有把你的问题表达清楚。
|
5
Abercrombie 2018-09-19 13:23:49 +08:00
确实没有描述清楚
如果就按照你的描述 文件这么少的 toy project 根本不需要用到依赖( dependence )直接项目 B 包含四个文件编译就行了 如果是大项目 把需要共享的部分高度抽象化做成工具类 或者打包成.so 和头文件 |
6
wutiantong 2018-09-19 15:39:54 +08:00
basically, you need to learn this: https://en.wikipedia.org/wiki/Make_(software)
|
7
v2byy OP @wutiantong 恩,编写 makefile 其实跟我现在描述的方式无本质差别。makefile 也是相当于将源文件 include 进来,跟直接使用 visual studio 包含路径是一样的。
|
8
gnaggnoyil 2018-09-19 17:39:49 +08:00
自己手动改动 sln 和 vcproj.这俩里面都是 XML 的内容,语义很清晰.
|
9
smol 2018-09-19 17:59:02 +08:00 1
是这个意思么:你 B 通过源码包含了 A,C 也通过源码包含了 A,现在 C 链接到 B,结果提示 A 的符号冲突。
就事论事的办法:B 既然封装成库,就要详细规划 B 的接口,不要把 A 的东西暴露出来。这样 C 链接到 B 是就不会提示冲突。 更好的办法是:详细梳理你的各模块依赖,将接口进行合理设计,而不是这种胡乱包含,包的管理其实与语言无关,更多是一种逻辑能力。 |