Here's what we're using (found somewhere on the internet, slightly modified):


################################################################################
# MACRO_ADD_INTERFACES(idl_files...)
#
# Syntax: MACRO_ADD_INTERFACES(<output list> <idl1> [<idl2> [...]])
# Notes: <idl1> should be absolute paths so the MIDL compiler can find them.
# For every idl file xyz.idl, two files xyz_h.h and xyz.c are generated, which
# are added to the <output list>

# Copyright (c) 2007, Guilherme Balena Versiani, <[EMAIL PROTECTED]>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
MACRO (MACRO_ADD_INTERFACES _output_list)
 FOREACH(_in_FILE ${ARGN})
   GET_FILENAME_COMPONENT(_out_FILE ${_in_FILE} NAME_WE)
   GET_FILENAME_COMPONENT(_in_PATH ${_in_FILE} PATH)

   SET(_out_header_name ${_out_FILE}_h.h)
   SET(_out_header ${CMAKE_CURRENT_BINARY_DIR}/${_out_header_name})
   SET(_out_iid_name ${_out_FILE}.c)
   SET(_out_iid ${CMAKE_CURRENT_BINARY_DIR}/${_out_iid_name})
   #message("_out_header_name=${_out_header_name}, _out_header=${_out_header}, 
_out_iid=${_out_iid}")
   ADD_CUSTOM_COMMAND(
     OUTPUT ${_out_header} ${_out_iid}
     DEPENDS ${_in_FILE}
     COMMAND midl /header ${_out_header_name} /iid ${_out_iid_name} ${_in_FILE}
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   )

   MACRO_ADD_FILE_DEPENDENCIES(
     ${_out_header}
     ${_in_FILE}
   )

   SET_SOURCE_FILES_PROPERTIES(
     ${_out_header}
     ${_out_iid}
     PROPERTIES
     GENERATED TRUE
   )
   SET_SOURCE_FILES_PROPERTIES(${_in_FILE} PROPERTIES HEADER_FILE_ONLY TRUE)

   SET(${_output_list} ${${_output_list}}
     ${_out_header}
     ${_out_iid}
   )

 ENDFOREACH(_in_FILE ${ARGN})

ENDMACRO (MACRO_ADD_INTERFACES)


then in the main script:

# MIDL compiler
MACRO_ADD_INTERFACES(GENERATED_FILES_IDL ${PROJECT_IDL_FILES})

SOURCE_GROUP("IDL" FILES ${GENERATED_FILES_IDL} ${PROJECT_IDL_FILES})

ADD_EXECUTABLE( ${CURRENT_PROJECT}
  ...
  ${PROJECT_IDL_FILES}
  ${GENERATED_FILES_IDL}
)

Hope that helps.

Cheers
Andreas


On 11.09.2012 01:38, Robert Dailey wrote:
I'm creating a shared library target that needs to compile and include
source generated by an IDL. I want CMake to create a custom target
that will invoke MIDL.EXE (comes with Windows SDK) against the IDL
file to generate the header / source files needed. These header/source
files will then be built by the shared library target. I saw a similar
post on this here:

http://www.cmake.org/pipermail/cmake/2011-July/045617.html

This seems complicated and I'm not sure it even works, since from my
tests, if source files don't exist by the time add_library,
add_executable, etc is called, generation will fail. I also don't want
CMake to invoke MIDL for me since that would require us to run CMake
again every time the IDL file changes (this shouldn't be the case, we
should just have to rebuild the target again using Visual Studio or
NMake).

Any ideas on a simple solution to this?

Thanks in advance.
--

Powered by www.kitware.com

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

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

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake



--
Scopis GmbH
Blücherstr. 22
10961 Berlin
Germany

E-Mail: [email protected]
Tel.: +49 (30) 39 82 05 98
Fax.: +49 (30) 39 82 05 99
Internet: www.scopis.com

HRB 128315 Berlin Charlottenburg
USt-IdNr.: DE272721463
Steuernummer: 29/014/02034
Geschäftsführer:  Bartosz Kosmecki

Diese E-mail, einschließlich der Anhänge, ist ausschließlich für den oben genannten Adressaten bestimmt und beinhaltet vertrauliche und/oder gesetzlich geschützte Informationen. Jedem anderen Empfänger ist die Vervielfältigung, Weitergabe oder Veröffentlichung untersagt. Falls Sie diese Mitteilung irrtümlicherweise erhalten haben, bitten wir um sofortige Information an den Absender und Vernichtung der E-mail.

This e-mail, including the attachments, is for the exclusive use of the above-named addresses and contains confidential information and/or information protected by law. Any other recipient is prohibited from duplicating, passing on to third parties, or publishing this information. If by error you are the recipient of this communication please inform the sender immediately and permanently delete this e-mail.
--

Powered by www.kitware.com

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

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

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to