从 CMAKE 调用 MIDL 编译器
Invoke MIDL compiler from CMAKE
我打算将 MIDL 编译器与 CMAKE 一起使用,但无法从 CmakeList 调用 MIDL 编译器
这是我用来实现目标的命令
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
)
当我构建我的项目时,${CMAKE_CURRENT_BINARY_DIR}
中没有 MIDL 编译器生成的文件
但是有了这个签名文件生成的很好
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
)
我做错了什么?
这就是它的工作原理:
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
)
为了改进@definename 的回答和@nathan-moinvaziri 的评论,只要将输出添加到源文件列表中就没有必要add_custom_target
,因此修改后的答案是:
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}/BookSku.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}
MAIN_DEPENDENCY ${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
# )
target_sources(${PROJECT_NAME} PRIVATE ${MIDL_FILE} ${MIDL_OUTPUT})
我打算将 MIDL 编译器与 CMAKE 一起使用,但无法从 CmakeList 调用 MIDL 编译器
这是我用来实现目标的命令
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
)
当我构建我的项目时,${CMAKE_CURRENT_BINARY_DIR}
但是有了这个签名文件生成的很好
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
)
我做错了什么?
这就是它的工作原理:
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
)
为了改进@definename 的回答和@nathan-moinvaziri 的评论,只要将输出添加到源文件列表中就没有必要add_custom_target
,因此修改后的答案是:
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}/BookSku.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}
MAIN_DEPENDENCY ${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
# )
target_sources(${PROJECT_NAME} PRIVATE ${MIDL_FILE} ${MIDL_OUTPUT})