[CMake] Cmake issue regarding conversion of existing Visual Studio .targets files to cmake

Ravi Raman ravi.raman at Xoriant.Com
Thu Aug 7 06:52:27 EDT 2014


Hi David,

We have a query regarding how to use MIDL related commands in cmake. In our project, many Visual Studio project files involve MIDL command execution. So, there are few Visual Studio targets which use MIDL related macros. For example, here is one such target:

  <Target Name ="GenTestMidlFile"
          Condition ="'$(LinkTimeMidl)'=='true'"
          Inputs="@(Link)"
          Outputs="$(IntDir)testmidl.rsp"
          BeforeTargets="Link"
          >
    <WriteLinesToFile File="$(IntDir)\testmidl.rsp" Lines="%(Link.MidlCommandLine)"/>
    <ItemGroup>
      <FileWrites Include="$(IntDir)testmidl.rsp"/>
    </ItemGroup>
  </Target>

The above target creates an output file testmidl.rsp containing the MIDL command line as set in Link.MidlCommandLine which is a Visual Studio macro.

So, in cmake we have taken the following approach:

1. We have added a PRE-LINK custom command using add_custom_command as follows:

                        add_custom_command(
                                        TARGET ${TARGETNAME}
                                        PRE_LINK
                                        COMMAND ${CMAKE_SOURCE_DIR}/GenTestMidlFile.bat "$(IntDir)" \"${MIDLCOMMAND}\"
                                        COMMENT "Generate MIDL command file $(IntDir)/testmidl.rsp")

2. The batch file GenTestMidlFile.bat takes MIDLCOMMAND as one of the arguments.
The MIDLCOMMAND argument will contain the MIDL command line value which will be set accordingly for each module that uses MIDL command, otherwise it will be empty.
The batch file logic is to create the file testmidl.rsp to contain the contents present in MIDLCOMMAND argument.

We have tested this and it works fine.

Just wanted to know, if there is a better approach or anything specific for MIDL in cmake?

Thanks & Regards

Ravi Raman
Xoriant Solutions Pvt. Ltd
4th Floor, Winchester, Hiranandani Business Park, Powai, Mumbai 400076, INDIA.
Tel: +91 22 30511000,9930100026 Extn: 2144 Voip No. 4088344495/96/97/98 Voip Extn:1178| Fax: +91 22 30511111
ravi.raman at xoriant.com| http://www.xoriant.com


-----Original Message-----
From: Ravi Raman
Sent: Friday, August 01, 2014 8:01 PM
To: 'David Cole'
Cc: cmake at cmake.org
Subject: RE: [CMake] Cmake issue regarding conversion of existing Visual Studio .targets files to cmake

Hi David,

Thanks. The 2nd approach of using batch file worked successfully.

Thanks & Regards

Ravi Raman
Xoriant Solutions Pvt. Ltd
4th Floor, Winchester, Hiranandani Business Park, Powai, Mumbai 400076, INDIA.
Tel: +91 22 30511000,9930100026 Extn: 2144 Voip No. 4088344495/96/97/98 Voip Extn:1178| Fax: +91 22 30511111
ravi.raman at xoriant.com| http://www.xoriant.com


-----Original Message-----
From: David Cole [mailto:dlrdave at aol.com]
Sent: Friday, August 01, 2014 5:41 PM
To: Ravi Raman
Cc: cmake at cmake.org
Subject: Re: [CMake] Cmake issue regarding conversion of existing Visual Studio .targets files to cmake

Sorry about the premature "send" on that last email...

First try this:

add_custom_command(
        TARGET ${TARGETNAME}
        POST_BUILD
          COMMAND ${TBIN}/VerCheck.exe \"$(TargetPath)\"
           COMMAND copy \"$(TargetPath)\"
\"$(TargetPath).vercheck_dummy_target\"
        COMMENT "Checking if $(TargetPath) has version info...")

i.e. -- just say "POST_BUILD" once, then a sequence of COMMAND lines.
(I think it's passing your second POST_BUILD as an argument to
VerCheck...)


If that still doesn't work, try:

add_custom_command(
        TARGET ${TARGETNAME}
        POST_BUILD
          COMMAND VerCheckAndCopy.bat "${TBIN}" "$(TargetPath)"
        COMMENT "Checking if $(TargetPath) has version info...")

and delegate it to a batch script that takes arguments which internally
does the sequence of commands you want. If you go this route, you may
still need nested quotes around "$(TargetPath)" -- CMake doesn't know
about expanding those VS values, and whether or not they'll need quotes
around them.

HTH,
David C.





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20140807/ca0b22e3/attachment-0001.html>


More information about the CMake mailing list