Visual studio 如何使用CMake和Visual Studio设置Path环境变量以运行测试

Visual studio 如何使用CMake和Visual Studio设置Path环境变量以运行测试,visual-studio,dll,build,cmake,Visual Studio,Dll,Build,Cmake,我正在使用CMake生成Visual Studio项目文件。我想在设置PATH环境变量后运行测试可执行文件,以便它能够加载所需的dll。我试着按照当时的讨论进行,但不起作用 您是否将CMake与Visual Studio一起用于此目的?请分享你的经验 此外,我没有找到调试CMake脚本的简单方法,例如查看它为PATH变量指定了什么值。使用CMake\u verbose\u MAKEFILE设置CMake verbose没有帮助。我将如何亲自调试它 刚刚发现了这个问题。调试我使用的cmake文件

我正在使用CMake生成Visual Studio项目文件。我想在设置PATH环境变量后运行测试可执行文件,以便它能够加载所需的dll。我试着按照当时的讨论进行,但不起作用

您是否将CMake与Visual Studio一起用于此目的?请分享你的经验


此外,我没有找到调试CMake脚本的简单方法,例如查看它为PATH变量指定了什么值。使用
CMake\u verbose\u MAKEFILE
设置CMake verbose没有帮助。我将如何亲自调试它

刚刚发现了这个问题。调试我使用的cmake文件

MESSAGE( STATUS "static text ${variable}" )
我从未设置过让测试运行的路径。你在用CTest吗?看起来您正在跟踪的链接与ctest一起使用

如果我想让它工作,我会先显式地使用
set\u tests\u properties

set_tests_properties(SomeTest PROPERTIES ENVIRONMENT "PATH=c:\somedir;c:\otherdir")

然后使其更通用。

要从CMake在Visual Studio中设置自定义项目设置,您可以使用XML文件作为模板,该模板可以从CMake配置为
.user
文件。
在我的工作中,我们使用它来设置自定义调试参数

检查包含生成的
.vcxproj
文件的目录,了解
.user
文件中的用户设置。下面是我们使用的示例
UserTemplate.vcxproj.user
文件的一个片段


设置PATH变量的
UserTemplate.vcxproj.user
的另一个示例是:


路径=…\您的_路径;%路径%”。
WindowsLocalDebugger
CMakeLists.txt
文件旁边设置
UserTemplate.vcxproj.user
文件,可以将CMake中所需的任何变量注入构建项目的
.vcxproj.user
文件。 在CMake中,您可以设置适当的CMake变量(如果需要,还可以在模板文件中添加更多变量)

#查找用户名和系统名
SET(系统名称$ENV{USERDOMAIN}缓存字符串SystemName)
设置(用户名$ENV{USERNAME}缓存字符串USERNAME)
#配置模板文件
设置(用户文件${u projectName}.vcxproj.${SYSTEM\u NAME}.${USER\u NAME}.USER)
设置(输出路径${CMAKE\U CURRENT\U BINARY\U DIR}/${USER\U FILE})
配置_文件(仅限UserTemplate.vcxproj.user${user_文件}@
如果您不关心系统和用户名,下面的配置就足够了

#配置模板文件
SET(用户文件${u projectName}.vcxproj.USER)
设置(输出路径${CMAKE\U CURRENT\U BINARY\U DIR}/${USER\U FILE})
配置_文件(仅限UserTemplate.vcxproj.user${user_文件}@

以下是相关的CMake功能请求报告:


更新:根据解决-感谢Florian的以下评论。

您可以使用新的目标属性(版本>=3.8)全局提供任何选项

以下是一个工作示例:

CMakeLists.txt

cmake_最低要求(3.0版)
项目(SetEnvPathTest)
文件(WRITE main.cpp[=[
// http://en.cppreference.com/w/cpp/utility/program/getenv
#包括
#包括
int main()
{
if(const char*env_p=std::getenv(“路径”))

std::cout只是想指出一个非常有用的补充 允许您设置多个环境变量,而不是仅设置一个(例如,仅设置路径) 在这个链接中给出

例如,如果除了设置路径之外,您还想设置另一个变量OTHERVAR 人们必须修改这条线

<LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
PATH=C:\Test

PATH=C:\Test
;OTHERVAR=“OTHERVAR的值”
其中符号“
”告诉xml解析器引入LF字符。因此,多个变量定义 如果由LF字符分隔(CR字符也起作用,但组合CRLF不起作用),则可能


还请注意,
和下一个变量之间不能有任何空格。

Cmake有一个VS_DEBUGGER_环境属性,可用于设置自定义路径


其他一些有用的属性是VS_DEBUGGER_COMMAND_参数,VS_DEBUGGER_WORKING_目录。

这基本上是可行的,但随后VStudio会覆盖我的新.user文件。我如何指示VStudio使用不同的.user文件,或尊重我的更改?@terry lorber:今天我验证了上述内容是否确实适用于VS2008SP1。我创建了一个.vcproj文件使用CMake,在Visual Studio正常创建文件的正确位置复制了一个.vcproj…用户文件,当我在VS IDE中查看.sln文件时,我对该文件的本地更改显示出来。我扩展了这一点,包括支持VS2010-请参阅技巧中的CreateLaunchers,在生成此文件时不能打开Visual Studio-退出时它会覆盖此文件。Visual Studio(10)可以打开,您只需关闭解决方案。这是一个很好的解决方案,但我想知道示例的最后一行是否有输入错误。
CONFIGURE_文件
write to
${OUTPUT_PATH}
取而代之的是?问题现在已经解决了。不客气。我尝试了一下,并添加了一个代码示例。这是一个很棒的解决方案!对我来说非常适合。不适用于visual studio community 2019。查看下面的评估值窗口,你可以发现这是错误的。我只在VS中测试了它,直到2017年。
<LocalDebuggerEnvironment>PATH=C:\Test &#xA;OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>
set(MY_PATH "PATH=%PATH%" ${MY_CUSTOM_PATH})
set_target_properties(MyTarget PROPERTIES VS_DEBUGGER_ENVIRONMENT "{MY_PATH}")