views:

2858

answers:

4

I am using CMake to generate Visual Studio project files. I want to run the test executable after setting the PATH environment variable so that it is able to load the required dll. I tried as per the discussion at http://www.mail-archive.com/[email protected]/msg21493.html but it does not work.

Have you used CMake with Visual Studio for this purpose? Please share your experiences.

Also, I find no easy way to debug my CMake script, for example to see what value it assigns to the PATH variable. Setting CMake verbose with CMAKE_VERBOSE_MAKEFILE does not help. How would I go about debugging it myself?

+2  A: 

Just spotted this question now. To debug cmake files I use

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

I have never had to set the path get my tests to run. Are you using CTest? It looks like the link you are following is used with ctest.

If I was trying to get this to work I would use set_tests_properties explicitly first.

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

Then make it more general.

Iain.

iain
+1  A: 

Just wondering how you've gone finding a solution to this?

I'm having the same problem and I suspect it is because I'm not using the cvs build of cmake. In this post it is suggested that this wont be released until 2.8!

http://www.itk.org/Bug/view.php?id=7885

+7  A: 

For setting custom project setting in Visual Studio from CMake you can use a XML file as a template which can be configured from CMake to work as the .user file.
At my work we use this to set custom debug parameters.

Check the directory containing the generated .vcproj files for the user settings in the .user files. Here is a snippet of an example UserTemplate.vcproj file we use.

<?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 -->

This way you can inject any needed variables from CMake into the .user file. In CMake you can set the appropiate CMake variables (and add more in the template file if you need them). Next you can do something like this to configure the file.

# 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)
pkit
This mostly works, but then VStudio overrides my new .user file. How do I instruct VStudio to use a different .user file, or respect my changes?
Terry Lorber
+1  A: 

Here is related CMake feature request report:

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

mloskot