CMake 从公共源代码树生成多个项目的方法
CMake way to generate multiple projects from common source tree
我的C++项目非常大,导致生成 5 个不同的二进制文件。例如,在VStudio中,我的单个解决方案有5个不同的"项目"。例如,在XCode中,我的单个项目有5个不同的目标。
代码组织在一个非常深的"src"文件夹中,其中包含许多级别的嵌套子文件夹。此 src 文件夹对于所有 5 个二进制文件都是通用的,因为大部分源代码都大量重用,但每个二进制文件都需要一些源代码,但不是全部。
我想知道如何有效地创建一个CMakeList.txt它可以在这里创建我需要的东西。
笔记:
- 将代码重新组织成不同的结构不是一种选择,也不是使代码成为一堆静态库。
- 每个子文件夹的 CMakeList.txt 不是一个选项。它们太多了,维护将是一场噩梦。
- 文件(GLOB_RECURSE也不是一个好的选择,因为它会为每个二进制文件获取大量源文件,而这些文件对于该特定二进制文件进行编译是不必要的。
- 理想情况下,将生成一个XCode项目(具有5个目标)或ONE VStudio解决方案(具有5个项目)。我不希望打开 5 个不同的项目。
我会完全满足于必须从某处的巨大列表中手动添加/删除源文件......理想情况下,在可以被CMake吸收的外部文件中。例如 SourceFilesForBinary1.txt、SourceFilesForBinary2.txt等,但我不确定该怎么做,或者这是否是疯狂的。
任何建议将不胜感激。
CMake 有一个包含函数。您可以使用它来实现"某处巨大的手动管理列表"解决方案。
你知道GLOB_RECURSE被赋予一个模式,对吧,所以它排除了无趣的文件?即使没有,在任何地方都可以使用GLOB_RECURSE也可以使用包含和邪恶的手动管理列表。
我不确定你为什么不想要静态库。这些是解决这个问题的好方法。对于像这样的一大堆共享代码,如果您将其编译为可重定位的静态库一次,然后将其与 LTO 链接到您的各种用途中,则可以避免多次重新编译源代码。如果你使用的是一个共享库(所以静态库方法会使你所有未使用的符号消失),你可以使用 --whole-archive 编译器开关来保留它们。
相关文章:
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 在Visual Studio C++项目中包含源库的正确方法是什么?
- 实现Eigen's块或Boost's的项目方法
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- 有没有一种简单的方法可以在C++中获取特定索引之后向量中的所有项目?
- 是否可以简化此方法以安装和导出基于 CMake 的项目?
- 有没有更好的方法来检测向量中一个项目的多次出现?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 我有一个启用了代理存根支持的 ATL 项目,在哪里可以找到 xdlldata.h 文件中所有方法的实现
- C++简单的暴力项目密码输入方法
- Winforms-将Visual C 项目UI转换为Visual C#的任何方法
- (C )正在创建专门用于处理所有其他自定义对象的类/对象一种处理项目的正确方法
- 从多个 std::vector 中删除项目的最快方法
- 使用VCPKG与朋友共享您的项目的最佳方法是什么?
- 使用C 支持创建Android项目的正确方法
- 在C 开源项目中包括单位测试的最佳方法
- 测试项目在访问私有静态方法时遇到问题,尽管我从未直接调用过它
- 这是从VS window c ++项目迁移到linux项目的最有效方法
- Qt项目中对glew方法的未定义引用
- 将CMAKE项目集成到Buck中的最佳方法是什么?