Jesper Eskilson wrote:
Hi all,

I tried following the instructions on the wiki on how to define my own
build type (configuration), however the new build type ("Develop")
does not show up as a valid solution configuration in Visual Studio.
Why is that?

Custom build types don't work under Visual Studio. The following "patches" (not really a patch but the best I could do at the moment) gives you custom build types under Visual Studio. These are against latest CVS.

I have a number of other changes in my CMake source. I hope I got all the right ones. If this doesn't work for you, I'll modify a pristine CMake CVS get and send a real patch.

Josh

In void cmGlobalVisualStudio7Generator::GenerateConfigurations(cmMakefile* mf), turn off the hardcoded config check and stop the error call if you aren't using one of the hardcoded build types:

//      if(config == "Debug" || config == "Release" ||
//         config == "MinSizeRel" || config == "RelWithDebInfo")
       {
       // only add unique configurations
       if(std::find(this->Configurations.begin(),
                    this->Configurations.end(),
                    config) == this->Configurations.end())
         {
         this->Configurations.push_back(config);
         }
       }
/*      else
       {
       cmSystemTools::Error(
         "Invalid configuration type in CMAKE_CONFIGURATION_TYPES: ",
         config.c_str(),
         " (Valid types are Debug,Release,MinSizeRel,RelWithDebInfo)");
       }*/


In void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, const char* configName, cmTarget &target), turn off the .vcproj output that generates debug information. The reason for this is a new flag in cmLocalVisualStudio7GeneratorLinkFlagTable that will translate a /DEBUG link line option to the GenerateDebugInformation .vcproj output for any configuration that specifies it.

/*    if(strcmp(configName, "Debug") == 0
      || strcmp(configName, "RelWithDebInfo") == 0)
     {
     fout << "\t\t\t\tGenerateDebugInformation=\"TRUE\"\n";
     }*/

and the second one:

/*    if(strcmp(configName, "Debug") == 0
      || strcmp(configName, "RelWithDebInfo") == 0)
     {
     fout << "\t\t\t\tGenerateDebugInformation=\"TRUE\"\n";
     }*/

In cmVS7FlagTable cmLocalVisualStudio7GeneratorLinkFlagTable[] =, add:

 {"IgnoreAllDefaultLibraries", "NODEFAULTLIB", "ignore all default libs",
  "TRUE", 0},
 {"OptimizeReferences", "OPT:REF", "optimize references", "2", 0},
 {"EnableCOMDATFolding", "OPT:ICF", "enable comdat folding", "2", 0},
 {"GenerateDebugInformation", "DEBUG", "debug support", "TRUE", 0},
 {"TargetMachine", "MACHINE:X86", "x86 support", "1", 0},
 {0,0,0,0,0}

In void cmLocalVisualStudio7GeneratorOptions::HandleFlag(const char* flag), turn off the /D check for the link command line. If you don't, it thinks it is a #define:

 // Look for known arguments.
 if(flag[0] == '-' || flag[0] == '/')
   {
   // Look for preprocessor definitions.
if(flag[1] == 'D' && this->FlagTable != cmLocalVisualStudio7GeneratorLinkFlagTable)


Finally, in Windows-cl.cmake, add the properly capitalized /DEBUG (according to the MSVC documentation). Compiler flags are case sensitive, but linker flags are not. However, CMake treats linker flags in a case sensitive fashion, so it is best to specify them as the MSVC documentation describes, as uppercase.

# add /DEBUG and /INCREMENTAL:YES to DEBUG and RELWITHDEBINFO also add pdbtyp
# on versions that support it
IF (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/DEBUG /PDBTYPE:sept /INCREMENTAL:YES") SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/DEBUG /PDBTYPE:sept /INCREMENTAL:YES")
ELSE (CMAKE_COMPILER_SUPPORTS_PDBTYPE)
 SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "/DEBUG /INCREMENTAL:YES")
 SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "/DEBUG /INCREMENTAL:YES")
ENDIF (CMAKE_COMPILER_SUPPORTS_PDBTYPE)

_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to