- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个 CMake 项目。对于 CI,我决定使用 Azure Pipelines。但是,我在测试阶段在 MacOS 上遇到了一个小问题。问题是 MacOS 无法找到测试可执行文件,即使它在那里。
Earlier my project wasn't getting built up properly. But now the entire pipeline runs successfully (thanks to the Stack Overflow community) except for the minor glitch on MacOS. I have updated my question and now it tells what problem was and how I fixed it so that it may be helpful to others like me who are new to the world of CI.
- task: CMake@1
displayName: Generate CMake Cache
inputs:
workingDirectory: build
我认为 CMake 任务会自动驱动构建过程,因为文档中没有明确指定该任务实际执行的操作。除了打印 CMake 用法之外,这没有任何作用。然后我发现我们必须使用适当的命令行参数运行 CMake 任务两次(一次用于项目配置,然后用于实际构建)。
stages:
- stage: Build
displayName: Build
jobs:
- job: RunCMakeTask
displayName: Run CMake Task
strategy:
matrix:
LinuxDebug:
OS: 'Linux'
imageName: 'ubuntu-latest'
BuildConfiguration: 'Debug'
LinuxRelease:
OS: 'Linux'
imageName: 'ubuntu-latest'
BuildConfiguration: 'RelWithDebInfo'
MacOSDebug:
OS: 'MacOS'
imageName: 'macos-latest'
BuildConfiguration: 'Debug'
MacOSRelease:
OS: 'MacOS'
imageName: 'macos-latest'
BuildConfiguration: 'RelWithDebInfo'
WindowsDebug:
OS: 'Windows'
imageName: 'windows-latest'
BuildConfiguration: 'Debug'
WindowsRelease:
OS: 'Windows'
imageName: 'windows-latest'
BuildConfiguration: 'RelWithDebInfo'
pool:
vmImage: $(imageName)
steps:
- script: mkdir $(BuildConfiguration)
displayName: Create Build Directory
workingDirectory: $(Build.SourcesDirectory)
- task: CMake@1
displayName: Generate CMake Cache
inputs:
workingDirectory: $(BuildConfiguration)
cmakeArgs: '-DCMAKE_BUILD_TYPE=$(BuildConfiguration) ..'
- task: CMake@1
displayName: Run Build Process
inputs:
workingDirectory: $(BuildConfiguration)
cmakeArgs: '--build . --config $(BuildConfiguration)'
- task: PublishPipelineArtifact@1
displayName: Publish Build Artifact
inputs:
targetPath: $(BuildConfiguration)
artifactName: '$(OS)$(BuildConfiguration)'
- stage: Test
displayName: Test
dependsOn: Build
jobs:
- job: RunCTestOnWindows
displayName: Run CTest on Windows
variables:
OS: Windows
strategy:
matrix:
Debug:
BuildConfiguration: 'Debug'
Release:
BuildConfiguration: 'RelWithDebInfo'
pool:
vmImage: 'windows-latest'
steps:
- task: DownloadPipelineArtifact@2
displayName: Download Build Artifact
inputs:
artifact: '$(OS)$(BuildConfiguration)'
path: $(Build.SourcesDirectory)/$(BuildConfiguration)
- script: ctest -C $(BuildConfiguration) --output-on-failure
workingDirectory: $(BuildConfiguration)
- job: RunCTestOnUnixBasedSystems
displayName: Run CTest on Unix Based Systems
strategy:
matrix:
LinuxDebug:
OS: 'Linux'
imageName: 'ubuntu-latest'
BuildConfiguration: 'Debug'
LinuxRelease:
OS: 'Linux'
imageName: 'ubuntu-latest'
BuildConfiguration: 'RelWithDebInfo'
MacOSDebug:
OS: 'MacOS'
imageName: 'macos-latest'
BuildConfiguration: 'Debug'
MacOSRelease:
OS: 'MacOS'
imageName: 'macos-latest'
BuildConfiguration: 'RelWithDebInfo'
steps:
- task: DownloadPipelineArtifact@2
displayName: Download Build Artifact
inputs:
artifact: '$(OS)$(BuildConfiguration)'
path: $(Build.SourcesDirectory)/$(BuildConfiguration)
- script: find $(BuildConfiguration)/Tests -type f -name "Test*" ! -name "*.*" ! -exec chmod u+rx {} \;
displayName: Change File Permissions
- script: ctest -C $(BuildConfiguration) --output-on-failure
workingDirectory: $(BuildConfiguration)
管道在 Windows 和 Linux 上运行良好,但我在 MacOS 上遇到了一个小问题。在 MacOS 上,
ctest
即使在那里,也无法找到测试可执行文件。 (如果我的管道或我的 CMakeLists.txt 文件中有任何问题,它也应该在 Windows 和 Linux 上失败)
Test project /home/vsts/work/1/s/DebugStart 1: StringOperations_CaseIgnore Could not find executable /Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsLooked in the following places:/Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperations/Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperations/Users/runner/work/1/s/Debug/Tests/StringOperations/Debug/TestStringOperations/Users/runner/work/1/s/Debug/Tests/StringOperations/Debug/TestStringOperationsDebug//Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsDebug//Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsUsers/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsUsers/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsUsers/runner/work/1/s/Debug/Tests/StringOperations/Debug/TestStringOperationsUsers/runner/work/1/s/Debug/Tests/StringOperations/Debug/TestStringOperationsDebug/Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsDebug/Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperations1/1 Test #1: StringOperations_CaseIgnore ......***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 - StringOperations_CaseIgnore (NotRun) Unable to find executable:/Users/runner/work/1/s/Debug/Tests/StringOperations/TestStringOperationsErrors while running CTest
ls -l Debug/Tests/StringOperations
这是输出:
drwxr-xr-x 3 vsts docker 4096 Aug 6 15:05 CMakeFiles
-rw-r--r-- 1 vsts docker 1208 Aug 6 15:05 cmake_install.cmake
-rw-r--r-- 1 vsts docker 642 Aug 6 15:05 CTestTestfile.cmake
-rw-r--r-- 1 vsts docker 9838 Aug 6 15:05 Makefile
-rwxr--r-- 1 vsts docker 1715072 Aug 6 15:05 TestStringOperations
这证实了测试可执行文件 (TestStringOperations) 与用于 Windows 和 Linux 的位置相同,但该过程仍然失败。
Set(SRC StringOperations.cpp)
Add_Executable(TestStringOperations ${SRC})
Target_Include_Directories(TestStringOperations PUBLIC
${HEADER_PATH}/StringOperations
)
Target_Link_Libraries(TestStringOperations
PRIVATE ${GTEST_LIBS}
PRIVATE StringOperations
)
Add_Test(NAME StringOperations_CaseIgnore COMMAND TestStringOperations)
我曾尝试在 Stack Overflow 和其他一些网站上寻求有关此问题的帮助,但他们的解决方案并没有使我受益。
最佳答案
尝试运行 Publish Pipeline Artifact task在你的构建之后。正如评论中提到的,这将发布您的构建内容,并允许跨阶段共享。
执行此操作后,您还可以在管道的 UI 中将其视为已发布的工件。
# Publish pipeline artifacts
# Publish (upload) a file or directory as a named artifact for the current run
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Pipeline.Workspace)'
artifactName: # 'drop'
另一个可以在阶段结束时进行的肠道检查是包含一个 powershell 脚本来查看您正在工作的目录的内容:
-powershell: Get-ChildItem -Path 'Insert root path' -recurse
关于c++ - MacOS 上的 CTest 错误 : Test Executable not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63131708/
我希望 ctest 在默认情况下向我显示失败的测试输出。也就是说,我要运行: $ make all test 无需 cat Testing/Temporary/LastTest.log 即可查看失败测
我发现通用 ctest命令没有提供关于测试的太多信息,所以我想添加 ctest --output-on-failure但不必让用户担心标志。我希望他们只是cmake , make项目并运行 ctest
我有一个结构的项目 ├── CMakeLists.txt ├── mzl.c ├── mzl.h └── tests ├── CMakeLists.txt ├── mzl-commun
我有一个基于 CMake 的项目,它由几个子组件组成,它们都可以独立编译和测试。目录布局如下所示: . ├── CMakeLists.txt ├── comp1 │ ├── CMakeLists.
在 CMake 中,可以使用 add_subdirectory(foo EXCLUDE_FROM_ALL)排除在 foo 下定义的目标默认情况下构建,除非其他目标需要它们,如下所示: add_subd
在 CMake 中,可以使用 add_subdirectory(foo EXCLUDE_FROM_ALL)排除在 foo 下定义的目标默认情况下构建,除非其他目标需要它们,如下所示: add_subd
这个问题在这里已经有了答案: How to tell a test under cmake/ctest where to find its input data ... without changi
我的 cmake 项目具有以下树结构: ├── CMakeLists.txt ├── basis ├── build ├── deps ├── study 其中 /deps 包含所有第 3 方依赖项,
我只想运行特定选择的测试。来自CMake Documentation我找到了 -R 和 -E , 所以我可以运行像 ctest -E UNWANTED_TESTS -R WANTED_TESTS 这
假设在 CMakeLists.txt 我有 add_executable(mytarget main.cpp) enable_testing() add_test(mytarget_test0 myt
我找不到如何指定标签。应该是这样的 ADD_TEST( FirstTest RunSomeProgram "withArguments" ) SET_TESTS_PROPERTIES( FirstTe
我想默认禁用一组测试,但能够在明确定位时运行它们。 例如。假设我有一个项目,其中包含许多通过 add_test(NAME SomeNameHere COMMAND SomeCommandHere) 添
我为我的项目编写了许多单元测试,并使用 CTest 执行。我想将结果集成到我的 TeamCity 构建中。我已经为我的测试框架(Boost Test)下载并设置了插件。 我遇到的问题是,测试运行时使用
我正在使用 CMake 开发一个项目,并且刚刚集成了一些 CppUnit 测试。我想使用 CTest,因此我在 CMakeLists.txt 文件中使用了 add_test,以便在键入 make te
当我使用 ctest 接口(interface)进行 cmake ( add_test(...) ),并运行 make 目标 make test ,我的几个测试失败了。当我直接从二进制构建文件夹的命令
如上指定 https://cmake.org/cmake/help/v3.7/manual/ctest.1.html , ctest 支持过滤测试以通过正则表达式运行。不幸的是,我似乎无法找出 cte
打电话 ctest -j4 -DCTEST_MEMORYCHECK_COMMAND="/usr/bin/valgrind" -DMemoryCheckCommand="/usr/bin/valgrin
我正在尝试为某些遗留软件创建一些集成测试。当前进行测试的方法是使用已知输入运行代码,然后手动将输出与已知输出进行比较。 我想自动化这个过程,因为我已经在使用 CMake 我想用 CTest 来做这个。
我的任务是为基于 C++ 的项目构建 Python 绑定(bind)(使用 swig)。该项目使用 cmake 进行构建,使用 ctest 进行测试,并且应该将绑定(bind)的构建和测试集成到其中。
我可以在 this 之后使用 cmake 运行覆盖率检查维基页面。这非常简单,只需设置一个仪表板,我就可以在浏览器上很好地查看代码覆盖率(后一部分)。但我不想每次都 ctest 只是为了检查单个文件的
我是一名优秀的程序员,十分优秀!