ctest 似乎没有使用 CMAKE_TOOLCHAIN_FILE 中的设置
ctest doesn't seem to use the settings in CMAKE_TOOLCHAIN_FILE
使我的应用程序在 Linux 上运行后,我正在尝试为 Windows 和 MacOSX 交叉编译它。我已经在使用 CMake。
我首先创建了一个工具链文件。这行得通。我的 linux 程序是用 mingw 编译的,最后我收到一个 .exe。
# build linux
$ cmake -Bbuild-linux
$ cmake --build build-linux
# build windows
$ cmake -Bbuild-windows -DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/x86_64-w64-mingw32.cmake
$ cmake --build build-windows
接下来会发生什么,是我 运行 ctest 来执行单元测试。在 Linux 中,这工作正常。但是当我使用交叉编译的东西执行此操作时,它找不到 .exe 文件。
# run tests linux
(cd build-linux; ctest)
# run tests windows
(cd build-windows; ctest)
没问题,我想 -- 我会根据环境附加 .exe 后缀 -- 使用 if(WIN32)
# CMakeLists.txt
if(WIN32)
SET(EXE_SUFFIX, ".exe")
endif()
ADD_TEST(NAME test_myapp
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/myapp${EXE_SUFFIX} ${CMAKE_CURRENT_SOURCE_DIR}/test_myapp.txt
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
但是 WIN32
由于某种原因不可用,并且它从不附加后缀。为什么 WIN32
不可用?是 ctest 不知道工具链文件中的设置的问题吗?难道它没有意识到声明了WIN32吗?
我可以在我的 CMakeLists.txt 文件中的其他地方使用 if(WIN32)
只要 cmake.exe
正在处理这些行,而不是 ctest.exe
.
综上所述,ctest 运行s时没有设置WIN32
。
有没有不用ctest就可以执行单元测试的方法?如果不能相信它能正确地做到这一点,也许我不再使用它了。
这一行完全不正确:
SET(EXE_SUFFIX, ".exe")
您设置了变量 EXE_SUFFIX,
,而不是 EXE_SUFFIX
。当您稍后展开 ${EXE_SUFFIX}
时,它返回为空,因此从程序其余部分的角度来看,整个 if (WIN32)
块是一个 no-op。
使我的应用程序在 Linux 上运行后,我正在尝试为 Windows 和 MacOSX 交叉编译它。我已经在使用 CMake。
我首先创建了一个工具链文件。这行得通。我的 linux 程序是用 mingw 编译的,最后我收到一个 .exe。
# build linux
$ cmake -Bbuild-linux
$ cmake --build build-linux
# build windows
$ cmake -Bbuild-windows -DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/x86_64-w64-mingw32.cmake
$ cmake --build build-windows
接下来会发生什么,是我 运行 ctest 来执行单元测试。在 Linux 中,这工作正常。但是当我使用交叉编译的东西执行此操作时,它找不到 .exe 文件。
# run tests linux
(cd build-linux; ctest)
# run tests windows
(cd build-windows; ctest)
没问题,我想 -- 我会根据环境附加 .exe 后缀 -- 使用 if(WIN32)
# CMakeLists.txt
if(WIN32)
SET(EXE_SUFFIX, ".exe")
endif()
ADD_TEST(NAME test_myapp
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/myapp${EXE_SUFFIX} ${CMAKE_CURRENT_SOURCE_DIR}/test_myapp.txt
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
但是 WIN32
由于某种原因不可用,并且它从不附加后缀。为什么 WIN32
不可用?是 ctest 不知道工具链文件中的设置的问题吗?难道它没有意识到声明了WIN32吗?
我可以在我的 CMakeLists.txt 文件中的其他地方使用 if(WIN32)
只要 cmake.exe
正在处理这些行,而不是 ctest.exe
.
综上所述,ctest 运行s时没有设置WIN32
。
有没有不用ctest就可以执行单元测试的方法?如果不能相信它能正确地做到这一点,也许我不再使用它了。
这一行完全不正确:
SET(EXE_SUFFIX, ".exe")
您设置了变量 EXE_SUFFIX,
,而不是 EXE_SUFFIX
。当您稍后展开 ${EXE_SUFFIX}
时,它返回为空,因此从程序其余部分的角度来看,整个 if (WIN32)
块是一个 no-op。