如何使用CMake和Visual Studio中运行测试设置PATH环境变量(How to Set

2019-06-23 11:13发布

我使用的CMake生成Visual Studio项目文件。 我想设置PATH环境变量,以便它能够加载所需的dll后运行测试可执行文件。 我试着按在讨论http://www.mail-archive.com/cmake@cmake.org/msg21493.html ,但它不工作。

你用的CMake与Visual Studio为此目的吗? 请分享你的经验。

另外,我觉得没有简单的方法来调试我的CMake的脚本,例如,看它分配到PATH变量什么价值。 设置CMake的使用详细CMAKE_VERBOSE_MAKEFILE没有帮助。 我将如何着手调试它自己?

Answer 1:

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

检查包含生成的目录.vcproj在用户设置文件.user文件。 下面是一个例子的一个片断UserTemplate.vcproj我们使用的文件。

<?xml version="1.0" encoding="Windows-1252"?>
  <VisualStudioUserFile
    ProjectType="Visual C++"
    Version="9.00"
    ShowAllFiles="false"
    >
    <Configurations>
        <Configuration
            Name="Debug|@USERFILE_PLATFORM@"
            >
            <DebugSettings
                Command="@USERFILE_COMMAND_DEBUG@"
                WorkingDirectory="@USERFILE_WORKING_DIRECTORY_DEBUG@"
                CommandArguments="@USERFILE_COMMAND_ARGUMENTS_DEBUG@"
                Attach="false"
                DebuggerType="3"
                Remote="1"
                RemoteMachine="@USERFILE_REMOTE_MACHINE_DEBUG@"
                            <!-- More settings removed for snippet -->
            />
        </Configuration>
            <!-- Rest of Configurations -->

这样,您就可以从注入CMake的任何需要的变量进入.user文件。 在CMake的你可以设置此时,相应的CMake变量(和添加更多的模板文件,如果需要的话)。 接下来,你可以做这样的事情配置文件。

# Find user and system name
SET(SYSTEM_NAME $ENV{USERDOMAIN} CACHE STRING SystemName)
SET(USER_NAME $ENV{USERNAME} CACHE STRING UserName)

# Configure the template file
SET(USER_FILE ${_projectName}.vcproj.${SYSTEM_NAME}.${USER_NAME}.user)
SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
CONFIGURE_FILE(UserTemplate.user ${USER_FILE} @ONLY)


Answer 2:

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

MESSAGE( STATUS "static text ${variable}" )

我从来没有设置路径得到我的测试运行。 您是否使用CTEST? 它看起来像你下面是使用CTEST的链接。

如果我试图得到这个工作,我会用set_tests_properties明确第一。

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

然后使之更加普遍。



Answer 3:

下面是相关CMake的功能要求报告:

http://www.kwwidgets.org/Bug/view.php?id=8884

UPDATE:解决按设置Visual Studio项目“自定义环境变量”与CMake的设置 -感谢下面的评论弗洛里安。



Answer 4:

与新的你可以给全球任何选项VS_USER_PROPS target属性(版本> = 3.8)。

这是一个工作示例:

的CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(SetEnvPathTest)

file(WRITE main.cpp [=[
// http://en.cppreference.com/w/cpp/utility/program/getenv
#include <iostream>
#include <cstdlib>

int main()
{
    if(const char* env_p = std::getenv("PATH"))
        std::cout << "Your PATH is: " << env_p << '\n';
}
]=])
add_executable(${PROJECT_NAME} main.cpp)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.Cpp.user.props" [=[
<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LocalDebuggerEnvironment>PATH=C:\Test</LocalDebuggerEnvironment>
  </PropertyGroup>
</Project>
]=])

set_target_properties(
    ${PROJECT_NAME}
    PROPERTIES
        VS_USER_PROPS "${PROJECT_NAME}.Cpp.user.props"
) 

参考

  • CMake的问题#8884:设置Visual Studio项目“自定义环境变量”与CMake的设置
  • 集诊断:从的CMakeLists.txt插入记号


Answer 5:

只是想指出的是一个非常有益的补充,使您可以设置多个环境变量,而不是只有一个(例如,仅PATH)在这个环节中给出https://stackoverflow.com/a/40531167/9253113

例如,如果除了设置PATH你要设置另一个变量OTHERVAR一个不得不修改行

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

<LocalDebuggerEnvironment>PATH=C:\Test &#xA;OTHERVAR="value of OTHERVAR"</LocalDebuggerEnvironment>

其中符号“ &#xA; ”讲述了XML解析器引进LF字符。 如果由LF字符(也是CR字符工作,但不是组合CRLF)分离,以便多个变量的定义是可能的

还要注意,不能有之间的任何空间&#xA; 和下一个变量。



文章来源: How to Set Path Environment Variable using CMake and Visual Studio to Run Test