我有一个 gitlab CI 管道,它在 Windows docker 容器中构建我的软件,这工作得很好,直到我将 cpr 添加到我的项目中。
在 cpr 的配置步骤中,在
check_cxx_source_runs("int main() { return 0; }" THREAD_SANITIZER_AVAILABLE)
中调用 cpr/cmake/sanitizer.cmake
在此阶段,配置步骤失败并出现以下错误:
CMake Error at C:/Program Files/CMake/share/cmake-3.27/Modules/Internal/CheckSourceRuns.cmake:93 (try_run):
The file:
C:/builds/<project>/build/CMakeFiles/CMakeScratch/TryCompile-ito77w/Debug/cmTC_4dfe8.exe
could not be removed:
Access is denied.
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.27/Modules/CheckCXXSourceRuns.cmake:52 (cmake_check_source_runs)
build/_deps/cpr-src/cmake/sanitizer.cmake:13 (check_cxx_source_runs)
build/_deps/cpr-src/CMakeLists.txt:55 (include)
我的理解是编译器能够生成测试可执行文件,但随后它尝试清理并且无法删除它创建的文件。
到目前为止我尝试过的:
echo "$(whoami)"
-> user manager\containeradministrator
CMAKE_CXX_COMPILER_WORKS=1, CMAKE_C_COMPILER_WORKS=1
CMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY
我开始陷入一个让我感觉不舒服的兔子洞,因为我对 Docker 和 Windows 权限系统的经验很少,所以如果有人有想法,我会很乐意在我破坏一切之前接受它:)
我可以通过将
--debug-trycompile
添加到 cmake 参数来解决此问题,这具有不删除 TryCompile/* 目录的副作用。