如何在CMake中打印工作目录?

3

我在我的CMakeLists.txt文件中有这一行:

add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

问题在于WORKING_DIRECTORY似乎没有被正确设置。
message("Futurama ${PROJECT_SOURCE_DIR}")

这表明PROJECT_SOURCE_DIR是我期望的,但是当我运行生成的VS项目时,工作目录是$(ProjectDir),这是错误的,因为我在一个单独的文件夹中进行构建。

如果可行的话,是否可能Visual Studio生成器的WORKING_DIRECTORY设置已损坏?

如果不可行,如何在add_test之后打印WORKING_DIRECTORY的状态?


看起来你将工作目录设置为“项目源目录”,而不是构建目录。在Visual Studio中使用 $(ProjectDir) 正确设置了这一点,所以我不确定问题在哪里。请问您想要实现什么样的行为? - Kevin
@squareskittles $(ProjectDir)在我的build/a/b/c/文件夹中...我想将测试的CWD设置为与源文件夹相同的文件夹。 build是与源文件夹完全不同的文件夹。(build是我的构建文件夹的名称,我不会在源文件夹中进行构建) - NoSenseEtAl
“如何在add_test之后打印WORKING_DIRECTORY的状态?” - 您可以读取测试的WORKING_DIRECTORY属性。例如,通过get_test_property(<test-name> WORIKING_DIRECTORY test_dir)并打印test_dir变量的值。 - Tsyvarev
这段程序相关的内容翻译如下: add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) get_test_property(${PROJECT_NAME} WORIKING_DIRECTORY test_dir) message("Futurama2 ${test_dir}")输出结果为:1> Futurama D:/GIT/... (源代码正确路径)1> Futurama2 NOTFOUND - NoSenseEtAl
您拼写错误了WORKING_DIRECTORY - Kevin
@squareskittles 不要盲目地从SO复制粘贴,孩子们 :)。谢谢你的注意...现在它显示值已正确设置...我猜问题是VS生成器有缺陷/限制。 - NoSenseEtAl
1个回答

1

有几种方法可以验证WORKING_DIRECTORY是否已正确设置。

编程方式(如备注所述):

get_test_property(${PROJECT_NAME} WORKING_DIRECTORY test_dir)
message("My test's working directory: ${test_dir}")

检查:

导航到您的构建文件夹中的CTestTestfile.cmake文件,并在文本编辑器中打开它。您可以在这里的命令中看到WORKING_DIRECTORY属性被正确设置。


然而,在 Visual Studio 的 RUN_TESTS 项目的工作目录中列出的 $(ProjectDir) 指向您构建目录中的文件夹;这是一个调试属性,在运行 CTest 测试时实际上并不会使用。这在 Visual Studio 调试可执行文件时使用。由于 RUN_TESTS 项目实际上无法进行调试(CTest 测试实际上作为后构建事件运行),因此该工作目录属性不适用于您的情况。

是的,你说得对,最终我把测试文件复制到了二进制文件所在的位置... execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ...) - NoSenseEtAl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接