QMake / jom 在 RC 之前强制额外的 MIDL 编译器到 运行
QMake / jom force extra MIDL compiler to run before RC
我正在将一个旧的 OCX 项目转换为 QMake(因为它正在获得我公司的 "new" 标准)。
在我的 Button.pro 文件中,我通过
添加了 MIDL 编译器
idl_c.output = $${DESTDIR}/${QMAKE_FILE_BASE}.tlb
idl_c.input = IDL
idl_c.commands = $${QMAKE_IDL} ${QMAKE_FILE_IN} $${IDLFLAGS} \
/tlb ${QMAKE_FILE_OUT}
idl_c.variable_out = GENERATED_FILES
idl_c.CONFIG += target_predeps
idl_c.name = MIDL
QMAKE_EXTRA_COMPILERS += idl_c
IDL += $$PWD/Button.odl
.pro文件还提到我有一个RC文件
RC_FILE += $$PWD/Button.rc
此 RC 文件包含此 tlb 文件的 TYPELIB,这意味着它必须可用 在 rc.exe 运行
之前
1 TYPELIB "Button.tlb"
然后我通过 QMake 生成一个 makefile 并使用 nmake 构建我的项目。一切运行良好:控制台没有显示任何错误,并且生成了输出 OCX(并且有效)。我可以清楚地看到首先执行 MIDL,然后是 RC,然后是其余部分。
如果我尝试使用 jom 构建,订单不再满足。 jom 似乎尝试并行执行 MIDL 和 RC:Button.tlb 在 RC.exe 需要它时还不存在,构建失败。
有没有办法强制 jom 在启动 rc 之前等待 midl 完成?
我在 MSVC2013 下使用 QT 5.3.1。
QMake 只不过是一个 makefile 生成器。而您的问题是由于 make(或 jom)并行作业执行。要解决此问题,您只需在 res/obj
和 tlb
文件之间的 Makefile 中引入一个依赖项(w/o 任何配方)。这可以通过以下方式完成:
dep_restlb.target = $(RES_FILE)
dep_restlb.depends = $${DESTDIR}/Button.tlb # QMAKE_FILE_BASE is not available here
QMAKE_EXTRA_TARGETS += dep_restlb
我正在将一个旧的 OCX 项目转换为 QMake(因为它正在获得我公司的 "new" 标准)。 在我的 Button.pro 文件中,我通过
添加了 MIDL 编译器idl_c.output = $${DESTDIR}/${QMAKE_FILE_BASE}.tlb
idl_c.input = IDL
idl_c.commands = $${QMAKE_IDL} ${QMAKE_FILE_IN} $${IDLFLAGS} \
/tlb ${QMAKE_FILE_OUT}
idl_c.variable_out = GENERATED_FILES
idl_c.CONFIG += target_predeps
idl_c.name = MIDL
QMAKE_EXTRA_COMPILERS += idl_c
IDL += $$PWD/Button.odl
.pro文件还提到我有一个RC文件
RC_FILE += $$PWD/Button.rc
此 RC 文件包含此 tlb 文件的 TYPELIB,这意味着它必须可用 在 rc.exe 运行
之前1 TYPELIB "Button.tlb"
然后我通过 QMake 生成一个 makefile 并使用 nmake 构建我的项目。一切运行良好:控制台没有显示任何错误,并且生成了输出 OCX(并且有效)。我可以清楚地看到首先执行 MIDL,然后是 RC,然后是其余部分。 如果我尝试使用 jom 构建,订单不再满足。 jom 似乎尝试并行执行 MIDL 和 RC:Button.tlb 在 RC.exe 需要它时还不存在,构建失败。
有没有办法强制 jom 在启动 rc 之前等待 midl 完成?
我在 MSVC2013 下使用 QT 5.3.1。
QMake 只不过是一个 makefile 生成器。而您的问题是由于 make(或 jom)并行作业执行。要解决此问题,您只需在 res/obj
和 tlb
文件之间的 Makefile 中引入一个依赖项(w/o 任何配方)。这可以通过以下方式完成:
dep_restlb.target = $(RES_FILE)
dep_restlb.depends = $${DESTDIR}/Button.tlb # QMAKE_FILE_BASE is not available here
QMAKE_EXTRA_TARGETS += dep_restlb