我正在尝试通过 sudo 运行一些测试,因为它们需要网络管理员权限,而且我不能使用 setcap,因为我们在无法在 setcap 可执行文件上运行的 valgrind 下运行其中的几个测试。由于某种原因,未找到 sudo。当从 bash 终端或 C 应用程序中的 system() 调用调用时,sudo 会按预期工作。
示例 CMakeLists.txt:
cmake_minimum_required(VERSION 3.9)
enable_testing()
add_test(NAME dummy_test
COMMAND sudo ls
)
输出:
$ make test
Running tests...
Test project /home/cmorgan/projects/test/build
Start 1: dummy_test
Could not find executable sudo
Looked in the following places:
sudo
sudo
Release/sudo
Release/sudo
Debug/sudo
Debug/sudo
MinSizeRel/sudo
MinSizeRel/sudo
RelWithDebInfo/sudo
RelWithDebInfo/sudo
Deployment/sudo
Deployment/sudo
Development/sudo
Development/sudo
Unable to find executable: sudo
1/1 Test #1: dummy_test .......................***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 - dummy_test (Not Run)
Errors while running CTest
make: *** [Makefile:73: test] Error 8
我尝试使用 sudo 的绝对路径,/usr/bin/sudo 遇到同样的问题。
这看起来可能与 sudo 是一个 setuid 应用程序有关,但我不确定具体如何进行。
最佳答案
我遇到了同样的问题,这是由于 sudo
二进制文件没有 read
权限造成的。如果你运行它,你可以,但是 cmake
试图变得聪明,因此失败了。解决方法:
sudo chmod +r /usr/bin/sudo
sudo
没有read
权限的系统示例是 Centos 6。
关于linux - cmake 找不到 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50398592/