跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • C++ 代码作为 submodule 时,如何避免包含的 main 函数与主包中的 main 冲突
未分類
18 3 月 2021

C++ 代码作为 submodule 时,如何避免包含的 main 函数与主包中的 main 冲突

C++ 代码作为 submodule 时,如何避免包含的 main 函数与主包中的 main 冲突

資深大佬 : going2think 1

想到一个 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 的时候本地都会与远端冲突,想问下大家一般是解决这个问题的呢

大佬有話說 (9)

  • 資深大佬 : GeruzoniAnsasu

    构建系统是啥?

    你不会把目录和子目录下所有.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 呢,这个问题没考虑过?

  • 主 資深大佬 : going2think

    @GeruzoniAnsasu 感谢回复,用 VS 来 build 代码,现在做法比较 low,是直接把 submodule clone 进去,作为一个项目来编译,没用 CMake 来管理。。

  • 資深大佬 : secondwtq

    VS 能不能把里面那个 main.cpp 在工程里面无视掉 … 貌似有个叫“Exclude from Project”的功能?
    其实一般来讲直接引入 C++ 项目的都是库,不会编译出可执行文件,有的项目既会编译出库也会编译出可执行文件,这种项目一般已经使用了 CMake 之类的工具管理 build 过程

  • 資深大佬 : ipwx

    VS 是不是该把项目文件放进去。。。我记得 GitHub 的 VS 代码标准做法就是这个。有了项目文件不就可以配置多个编译目标了嘛。

  • 資深大佬 : ipwx

    (我是 CLion + CMake 用户,反正我自己是靠 CMake 设置了多个编译目标的

  • 資深大佬 : GeruzoniAnsasu

    @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,然后就能正常嵌套构建了

  • 資深大佬 : Vinty

    project a
    project b
    project test a
    project test b
    这样

  • 主 資深大佬 : going2think

    @GeruzoniAnsasu @ipwx @secondwtq @Vinty 感谢大家的帮助,我大概有个思路了,之前用的比较傻瓜,对项目的 vcxproj 文件没有仔细看过,应该是可以修改这个文件达到目的的,再次谢谢大家的帮助,我去试一试

  • 資深大佬 : QBugHunter

    自己手写 cmake 就不会遇到这种问题

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具