gpt4 book ai didi

c++ - 在qmake中编译之前如何使用可执行文件构建多个头文件?

转载 作者:太空狗 更新时间:2023-10-29 21:34:54 28 4
gpt4 key购买 nike

我找到了一些方法(比如 Qt run script before make)如何在编译其他任何东西之前运行构建一个目标的脚本。

我似乎没有理解整个概念。我不知道如何在编译所有内容之前通过调用脚本/可执行文件来制作多个目标(几个 C++ 头文件),因为我需要那些生成的头文件进行编译。

简单来说,我会做类似的事情:

GENERATOR= \dist\gen_headers.exe

BUILD_SOURCES+= header1.h header2.h header3.h

header1.h header2.h header3.h: headers.h.in $(GENERATOR)
-$(RM) header1.h
-$(RM) header2.h
-$(RM) header3.h
$(GENERATOR) headers.h.in

clean-hook:
-$(RM) header1.h >NUL: 2>NUL:
-$(RM) header2.h >NUL: 2>NUL:
-$(RM) header3.h >NUL: 2>NUL:

我如何在 pro 中的 qmake 中执行此操作,看起来像以下文件?

win32:TEMPLATE = vclib
!win32:TEMPLATE = lib

QT += core
CONFIG += staticlib
CONFIG += no_keywords

#C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
QMAKE_CXXFLAGS += /wd4290

#forcing value to bool ->performance warning
QMAKE_CXXFLAGS += /wd4800

INCLUDEPATH += .
...

HEADERS += header1.h \
header2.h \
header3.h \
...

SOURCES += source.cpp \
...

contains(DEFINES, ARCH_x32) {
DESTDIR = ../Bin32
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x86
MOC_DIR = ./debug_x86
TARGET = lib32D
} else {
OBJECTS_DIR = ./release_x86
MOC_DIR = ./release_x86
TARGET = lib32
}
}

contains(DEFINES, ARCH_x64) {
DESTDIR = ../Bin64
CONFIG(debug, debug|release) {
OBJECTS_DIR = ./debug_x64
MOC_DIR = ./debug_x64
TARGET = lib64D
} else {
OBJECTS_DIR = ./release_x64
MOC_DIR = ./release_x64
TARGET = lib64
}
}

编辑 1:

我尝试在 contains 语句之前添加以下代码,但它似乎不起作用。

headers.target = headersDep
headers.commands = echo "Building headers..."; \
dist\gen_headers.exe headers.h.in; \
echo "Done building headers."; \
headers.depends =

QMAKE_EXTRA_TARGETS += headers
PRE_TARGETDEPS = headersDep

调用 qmake 时出现无法找到 header1、header2 和 header3 的错误。如果我尝试编译,我会收到类似的错误 No such file or directory。我的回声输出从未显示过。那我做错了什么?

编辑 2

好吧,我找到了system(command) .我从 Edit 1 中删除了内容,并在 INCLUDEPATH 语句之前添加了以下内容。

message(Building headers...)
system(dist\gen_headers.exe headers.h.in):message(Done building headers.)

如果我调用 qmake 来构建项目,那么我的 header 现在已构建,这很好。但是有一个问题:我在构建 header 时发出的那对消息出现了 5 次。这是为什么?我只想构建一次 header 。

最佳答案

终于找到方法了。我将 qmake 中的可能性用于 add my own compiler并从 here 中获得灵感.

我在 contains 语句之前添加了以下行。

# Building headers for each call of make (build process).
HEADERS_IN = headers.h.in
gen_headers.name = Building auto generated headers.
gen_headers.input = HEADERS_IN
gen_headers.output = header1.h header2.h header3.h
gen_headers.commands = dist\gen_headers.exe $${HEADERS_IN}
gen_headers.CONFIG += target_predeps
gen_headers.dependency_type = TYPE_C
gen_headers.variables_out = HEADERS
QMAKE_EXTRA_COMPILERS += gen_headers

现在,如果我在 Visual Studio 中进行编译,则会构建 header 并将 gen_headers.name 的内容作为输出发出。

关于c++ - 在qmake中编译之前如何使用可执行文件构建多个头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821141/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com