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
[email protected]| http://www.xoriant.com
-----Original Message-----
From: Ravi Raman
Sent: Friday, August 01, 2014 8:01 PM
To: 'David Cole'
Cc: [email protected]
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
[email protected]| http://www.xoriant.com
-----Original Message-----
From: David Cole [mailto:[email protected]]
Sent: Friday, August 01, 2014 5:41 PM
To: Ravi Raman
Cc: [email protected]
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