如何使用CMAKE来针对自定义编译器和自定义操作系统进行编译?

4
我想在一个非常大的C++项目中使用CMAKE。但是该项目没有使用“现代编译器”或流行的编译器,而是针对一种独特的操作系统(我们称之为OSreally),出于实际目的,我可以访问几乎所有其源代码(但我不能修改它,我只能对我的项目进行修改)。我的项目可以在Windows上编译并在Windows和OSreally上运行。那么我需要做什么来实现这个项目的CMAKE?以便我可以获得所有CMAKE的好处。
2个回答

2
在某种程度上,回答你的问题并不是很难。CMake非常可扩展,几乎所有东西都可以更改。例如,要使用自定义编译器,您可以在顶层构建文件中设置SET(CMAKE_CXX_COMPILER /path/to/compiler)。但是,即使像这样进行一些更多的黑客操作,也会让你开始为你奇怪的操作系统编译代码,但各种系统函数和标准库也可能存在问题。
如果没有人在您的操作系统上实现了标准库,则可能需要花费一些时间来构建它,并可能修改它以适应系统上的任何差异。对于基本上任何想要导入的库都是如此。无论如何,如果您拥有符合规范的C ++编译器,正确的路径就是在您的CMakeLists.txt中简单地设置上述变量,并在遇到问题时解决它们。

使用CMake为OSreally编译代码并不难,但是CMake会为编译器添加许多不必要的标志,我的编译器会忽略未知参数,只接受有效的参数,因此可以成功编译。链接是CMake没有按照我的要求执行的部分,它不想使用CMAKE_EXE_LINKER_FLAGS、cmake_c_link_executable或其他我在Google上找到的选项,我可以修改CMake语言链接的默认值来进行链接,但它也无法找到正确的目录。因此,我想从零开始,就像我在制作新编译器一样。 - Gatito
此外,在操作系统中我们并不使用C++标准库,但是我们实现了C标准库。我们的编译器符合C++98标准。 - Gatito
在C语言中进行链接确实很繁琐。不知道更多情况的话,我猜测你可能正在传递正确的链接器标志,但未将要链接的库放入库路径中。也许可以调查一下https://cmake.org/cmake/help/v3.0/command/link_directories.html,看看这个设置是否有帮助? - Qwertycrackers

1
我需要做的步骤是创建一个新的CMake工具链配置文件,以便使用自定义编译器和自定义操作系统。我们可以将自定义操作系统视为嵌入式系统。
在配置工具链文件中的所有选项后,CMake应该能够与自定义编译器/操作系统一起工作。

这还不太完整,因为没有关于如何做最基本的事情的文档,比如如何教 cmake 关于编译器命令行上要放什么 - 特别是当编译器有完全非标准的方式时。所以我想象你的编译器已经假装像另一个编译器一样运行了。现在想象一下,你得到了一个命令行,在任何 cmake 以前都没有见过等价物。结果证明你要么必须编辑 cmake 源代码,要么编写一个 cmake 脚本来模拟更类似于 gcc 的命令行。 :( - Kuba hasn't forgotten Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接