FindIDL
FindIDL copied to clipboard
CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp
FindIDL 
CMake module for building IDL files with MIDL and generating CLR DLL using Tlbimp.
- Introduction
- Requirements
- Usage
- find_package()
- add_idl()
- add_idl() with tlbimp
- MIDL flags
- TLBIMP flags
- Samples
- License
- Version History
Introduction
IDL is used for creating COM servers. Unfortunately CMake has a limited support for IDL, so this module comes to rescue. The Type Library Importer (Tlbimp) converts the type definitions found within a COM type library (TLB) into equivalent definitions in a common language runtime assembly. The output of Tlbimp.exe is a binary file (an assembly) that contains runtime metadata for the types defined within the original type library.
Requirements
- CMake 3.0 or higher
- MIDL compiler
- Tlbimp.exe (optional)
Usage
find_package()
Add FindIDL to the module search path and call find_package:
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake")
find_package(IDL REQUIRED)
FindIDL will search for midl.exe and tlbimp.exe
add_idl()
Takes two arguments: the name of the target project and idl file.
add_idl(<name> source)
Where:
<name>- name of the target projectsource- full path to idl file
Example:
add_idl(GreeterIDL Greeter.idl)
The function does the same work as MIDL, specifically generates files:
- Greeter_i.h
- Greeter_i.c
- Greeter_p.c
- Greeter.tlb
To use the generated files the idl project should be linked as following
target_link_libraries(Main GreeterIDL)
add_idl() with tlbimp
Takes four arguments: the name of the target project, idl file, TLBIMP flag and the name of the tlbimp target.
add_idl(<name> source TLBIMP <tlbimp name>)
Where:
<name>- name of the target projectsource- full path to idl fileTLBIMP- flag to indicate to run tlbimp<tlbimp name>- name of the tlbimp target
Example:
add_idl(GreeterIDLWithTLBIMP Greeter.idl TLBIMP GreeterInterop)
The function does the same work as MIDL and tlbimp.exe, specifically generates files:
- Greeter_i.h
- Greeter_i.c
- Greeter_p.c
- Greeter.tlb
- GreeterInterop.dll
To use the generated files the idl project should be linked as following
target_link_libraries(MainCpp GreeterIDL)
Or if you want to use the file generated by tlbimp:
target_link_libraries(MainCsharp GreeterInterop)
MIDL flags
To specify additional command-line options for midl set MIDL_FLAGS variabe.
set(MIDL_FLAGS /target NT60) # avoid MIDL2455 error
TLBIMP flags
To specify additional command-line options for tlbimp set TLBIMP_FLAGS variabe.
set(TLBIMP_FLAGS /silence:3002) # importing a type library into a platform agnostic assembly
Samples
Take a look at the samples folder to see how to use FindIDL.
License
Apriorit released FindIDL under the OSI-approved 3-clause BSD license. You can freely use it in your commercial or opensource software.
Version History
Version 1.0.2 (15 Aug 2019)
- New: Add
TLBIMP_FLAGS
Version 1.0.1 (08 Aug 2019)
- New: Add tlbimp
Version 1.0.0 (26 Oct 2018)
- Initial public release