【发布时间】:2020-11-20 10:00:55
【问题描述】:
我正在开发爱好操作系统,它可以交叉编译到我的开发 PC 以外的其他架构,并在 QEMU 模拟器中运行。
我正在尝试对我为内核开发的源文件引入单元测试,但让它们在我的开发机器上运行,而不是在我的目标上的 QEMU 中运行。
为了交叉编译我的源代码,我使用了使用我的自定义 GCC 工具链的工具链文件。由于来自CMake工具链文件使用原理,工具链文件设置在我的根CMakeLists.txt文件中project(...)定义之前。
我的问题是如何使用内置的 GCC 为我的开发机器 (x86_64) 构建我的测试可执行文件,同时为目标平台交叉编译我的内核二进制文件...我不知道如何设置 CMAKE_CXX_COMPILER / @ 987654326@ cmake 变量专门针对每个用例(测试、目标构建)
要查看我的特定项目,请随时浏览此处:https://gitlab.com/revolta/revolta
我想将test/ 添加到我的项目根目录,包括来自source/... 的选定源,并以某种方式从我的根目录CMakeLists.txt 管理它
提前感谢任何概念想法和帮助!干杯马丁
【问题讨论】:
-
Toolchain file 用于交叉编译由
CMAKE_TOOLCHAIN_FILE变量指定。通常,这个变量被传递给cmake可执行文件,但是你也可以在project()调用之前设置这个变量。如果您在CMakeLists.txt中设置此变量,那么您可以有条件地 设置它,具体取决于配置的目的(用于构建内核或构建测试)。 -
@Tsyvarev 我试过你的方法 - 有条件地在设置 project() 之前设置工具链文件的使用。到目前为止一切顺利,但现在我遇到了 cmake 缓存的问题。交叉编译后,我在缓存中设置了
CMAKE_CXX_COMPILER变量,但是一旦我重新配置为测试,使用本机系统g++(未使用工具链文件),CMAKE_CXX_COMPILER的设置会从以前的配置中记住,而本机g++是未使用。如何管理?我试图从缓存中删除变量(使用unset( CMAKE_CXX_COMPILER CACHE ),但没有解决它...... -
使用不同的构建目录来构建内核和构建测试。这样一来,它们之间就不会重复使用缓存。
-
@Tsyvarev 可以在 VS Code 中配置吗?也许为每个构建变体设置不同的构建目录?要知道,vs代码是直接触发我的根CMakeLists.txt,而不是使用configure.sh脚本...
-
我没有在 VS Code 下使用 CMake 项目。据我了解,这应该是从同一个 CMake 项目创建不同 VS Code 项目(具有不同构建目录)的一种方式。
标签: unit-testing cmake cross-compiling