想到一个 C++的问题,请大家帮忙看看,提前谢谢了。 现在有仓库 repo_A:
-repo_A
|-- A.h
|-- A.cpp
|-- main.cpp
在main.cpp
中定义了 main 函数,用于自己代码的测试。
现在把 repo_A 作为 submodule 包含在一个更大的仓库 repo_B 中,而 repo_B 也有自己的 main 函数,结构大致如下:
-repo_B
|--main.cpp
|-- repo_A
|--|-- A.h
|--|-- A.cpp
|--|-- main.cpp
|--repo_C
...
那有个问题,在编译时(例如在 VS 中一键编译),如何避免两个 main 函数的冲突呢,如果注释掉 repo_A 中的 main 函数,每次 pull 的时候本地都会与远端冲突,想问下大家一般是解决这个问题的呢
1
GeruzoniAnsasu 2021-03-20 17:06:34 +08:00
构建系统是啥?
你不会把目录和子目录下所有.cpp 文件全抓到一起作为 source 吧? 典型 cmake: projectA/CMakeLists.txt: add_subdirectory(src) projectA/src/CMakeLists.txt: file(GLOB_RECURSE *.cpp) target_include_directorie(projectA `submodule`/include) 这种结构,projectA 和 submodule 的 source 又不交叉 抛开 submodule,unit test 也有 main 呢,这个问题没考虑过? |
2
going2think OP @GeruzoniAnsasu 感谢回复,用 VS 来 build 代码,现在做法比较 low,是直接把 submodule clone 进去,作为一个项目来编译,没用 CMake 来管理。。
|
3
secondwtq 2021-03-20 17:33:34 +08:00
VS 能不能把里面那个 main.cpp 在工程里面无视掉 ... 貌似有个叫“Exclude from Project”的功能?
其实一般来讲直接引入 C++ 项目的都是库,不会编译出可执行文件,有的项目既会编译出库也会编译出可执行文件,这种项目一般已经使用了 CMake 之类的工具管理 build 过程 |
4
ipwx 2021-03-20 17:34:44 +08:00
VS 是不是该把项目文件放进去。。。我记得 GitHub 的 VS 代码标准做法就是这个。有了项目文件不就可以配置多个编译目标了嘛。
|
5
ipwx 2021-03-20 17:35:35 +08:00
(我是 CLion + CMake 用户,反正我自己是靠 CMake 设置了多个编译目标的
|
6
GeruzoniAnsasu 2021-03-20 17:56:40 +08:00
@going2think vs 一样可以嵌套 project 啊
vs 最简单粗暴了项目包含的源文件全列在.vcxproj 里,没有就不编译。 一个 sln 能套 N 个 vcxproj,vcxproj 可以相互指定依赖,先构建被依赖的 project,然后构建上层的。 用 vs 的话你的项目目录应该是 project/: A.sln A.vcxproj submodules/ src/ project/submodules/: B/ project/submodules/B: B.vcxproj src/ 在 A.sln 里加入 A.vcxproj 和 B.vcxproj,A 依赖 B,然后就能正常嵌套构建了 |
7
Vinty 2021-03-20 19:35:48 +08:00
project a
project b project test a project test b 这样 |
8
going2think OP @GeruzoniAnsasu @ipwx @secondwtq @Vinty 感谢大家的帮助,我大概有个思路了,之前用的比较傻瓜,对项目的 vcxproj 文件没有仔细看过,应该是可以修改这个文件达到目的的,再次谢谢大家的帮助,我去试一试
|
9
QBugHunter 2021-03-21 18:51:55 +08:00
自己手写 cmake 就不会遇到这种问题
|