c++cmakemidl

Invoke MIDL compiler from CMAKE


I am going to use MIDL compiler with CMAKE but unable to invoke MIDL compiler from CmakeList

That is command which I use to achieve my goal

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/IFace.h ${CMAKE_CURRENT_BINARY_DIR}/GUIDS.c ${CMAKE_CURRENT_BINARY_DIR}/Proxy.c ${CMAKE_CURRENT_BINARY_DIR}/ProxyDll.c
COMMAND midl /h IFace.h /iid GUIDS.c /proxy Proxy.c /dlldata ProxyDll.c ${CMAKE_CURRENT_LIST_DIR}/include/Server.idl
)

When I build my project there are no files produced by MIDL compiler in ${CMAKE_CURRENT_BINARY_DIR}

But with this signature files generates well

add_custom_command(
PRE_BUILD
TARGET ${PROJECT_NAME}
COMMAND midl /h IFace.h /iid GUIDS.c /proxy Proxy.c /dlldata ProxyDll.c ${CMAKE_CURRENT_LIST_DIR}/include/Server.idl
)

What am I doing wrong?


Solution

  • That is how it works:

    set(MIDL_OUTPUT
        ${CMAKE_CURRENT_BINARY_DIR}/IFace.h
        ${CMAKE_CURRENT_BINARY_DIR}/GUIDS.c
        ${CMAKE_CURRENT_BINARY_DIR}/Proxy.c
        ${CMAKE_CURRENT_BINARY_DIR}/ProxyDll.c
        )
    set(MIDL_FILE
        ${CMAKE_CURRENT_LIST_DIR}/include/Server.idl
        )
    add_custom_command(
        OUTPUT ${MIDL_OUTPUT}
        COMMAND midl /h IFace.h /iid GUIDS.c /proxy Proxy.c /dlldata ProxyDll.c ${MIDL_FILE}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        DEPENDS ${MIDL_FILE}
        VERBATIM
        )
    add_custom_target(midl-cmplr
        DEPENDS ${MIDL_OUTPUT}
        )
    add_dependencies(${PROJECT_NAME}
        midl-cmplr
        )
    set_source_files_properties(
        ${MIDL_OUTPUT}
            PROPERTIES
                GENERATED TRUE
                )