【发布时间】:2020-11-30 03:29:15
【问题描述】:
我运行一个 Cortex-M 项目 (ARM)。在这里,我想使用 CMake 功能 add_test,然后我可以继续调用 make test。
这很好用。
我遇到的问题是我添加的单元测试应该在我的 PC (x86) 上而不是在 ARM 上运行,因此测试失败。
我的子项目是:
project(dummy_math_lib_2)
add_library(${PROJECT_NAME}
src/dummy_math_lib_2.cpp )
add_test(${PROJECT_NAME}
src/dummy_math_lib_2.cpp
unittest/src/unittest.cpp
)
target_include_directories(${PROJECT_NAME} PUBLIC inc)
target_link_libraries(${PROJECT_NAME})
在主 CMakeLists.txt 文件中,我启用“ENABLE_TESTING()”,然后执行以下操作:
cmake ..
make test
子项目树如下:
.
├── CMakeLists.txt
├── inc
│ └── dummy_math_lib_2.hpp
├── src
│ └── dummy_math_lib_2.cpp
└── unittest
├── inc
└── src
└── unittest.cpp
编辑:
project(dummy_math_lib_2)
add_library(${PROJECT_NAME}
src/dummy_math_lib_2.cpp )
target_include_directories(${PROJECT_NAME} PUBLIC inc)
add_executable(UnitTest1
unittest/src/test.cpp
)
add_test(Test1 UnitTest1)
输出:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/linux/workspace/cmake_t000D_cmake_DK/BUILD
Running tests...
Test project /home/linux/workspace/cmake_t000D_cmake_DK/BUILD
Start 1: Test1
Could not find executable UnitTest1
Looked in the following places:
UnitTest1
UnitTest1
Release/UnitTest1
Release/UnitTest1
Debug/UnitTest1
Debug/UnitTest1
MinSizeRel/UnitTest1
MinSizeRel/UnitTest1
RelWithDebInfo/UnitTest1
RelWithDebInfo/UnitTest1
Deployment/UnitTest1
Deployment/UnitTest1
Development/UnitTest1
Development/UnitTest1
Unable to find executable: UnitTest1
1/1 Test #1: Test1 ............................***Not Run 0.00 sec
0% tests passed, 1 tests failed out of 1
Total Test time (real) = 0.00 sec
The following tests FAILED:
1 - Test1 (Not Run)
Errors while running CTest
make: *** [Makefile:104: test] Error 8
EDIT2
好的,我找到了问题。解决方法如下:
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..
make # <--- FIRST BUILD IT!
make test <--- THEN RUN THE TEST
这在理论上 ;-) 现在我必须弄清楚如何为 x86 而不是 ARM 构建它。但到目前为止还好,谢谢大家帮助我。
【问题讨论】:
-
所以?你有问题要问吗?那么你想怎么解决这个问题呢?
-
尝试在您的工具链文件 (cmake.org/cmake/help/latest/variable/…) 中使用
CMAKE_CROSSCOMPILING_EMULATOR变量。我自己没有使用过,所以希望文档为您提供足够的信息。
标签: unit-testing cmake x86-64 cortex-m ctest