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.ra...@xoriant.com| http://www.xoriant.com


-----Original Message-----
From: Ravi Raman
Sent: Friday, August 01, 2014 8:01 PM
To: 'David Cole'
Cc: cmake@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.ra...@xoriant.com| http://www.xoriant.com


-----Original Message-----
From: David Cole [mailto:dlrd...@aol.com]
Sent: Friday, August 01, 2014 5:41 PM
To: Ravi Raman
Cc: cmake@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.





-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

Reply via email to