在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
How to build several header files using an executable before compiling in qmake?
我找到了一些方法(例如qt运行脚本之前(如何在编译其他任何内容之前运行脚本构建一个目标。
我似乎没有得到整个概念。我不知道如何通过在编译所有内容之前调用脚本/可执行文件来制作多个目标(几个C 标头文件(,因为我需要这些生成的标头文件进行编译。
在平原上我会做类似的事情:
GENERATOR= distgen_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:
我尝试在包含语句之前添加以下代码,但似乎不起作用。
headers.target = headersDep
headers.commands = echo "Building headers...";
distgen_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
好吧,我找到了系统(命令(。我从编辑1中删除了内容,并在INCLUDEPATH
语句之前添加了以下内容。
message(Building headers...)
system(distgen_headers.exe headers.h.in):message(Done building headers.)
如果我称qmake构建项目,我的标题现在是建造的,所以这很好。但是有一个问题:我在构建标头时发出的一对消息出现了5次。这是为什么?我只想构建一次标题。
我终于找到了一种方法。我利用Qmake中的可能性添加了自己的编译器并从这里获得了灵感。
我在包含语句之前添加了以下行。
# 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 = distgen_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中进行编译,则将构建标题,并且gen_headers.name
的内容作为输出发出。
相关文章:
- 使用 Premake5 构建项目不会生成可执行文件或中间体
- 在Visual Studio 2017中构建Qt可执行文件
- 在 eclipse 中以发布模式构建后没有可执行文件
- 为多个测试文件构建可执行文件
- 构建MacOS可执行文件,以便使用cmake(包括OpenCV)进行分发
- 使用 CodeBlocks + GCC 构建的可执行文件是否可以在任何 Windows 上运行?
- 在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
- cmake:构建可执行文件并库并链接它们
- CMake 构建静态可执行文件
- CMake 不会使用 add_executable 构建可执行文件
- 选择在CMAKE中构建库或可执行文件
- 使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
- 如何在 VSCODE 中构建、运行和删除可执行文件和虚拟文件
- 构建一个可执行文件,如果是单个 cpp 文件
- 将 CLANG 构建的可执行文件与 G++-v6 构建的 Boost 库链接时出错
- 如何为 CPP 程序构建可执行文件
- 如何使用 NetBeans 包含的所有库依赖项构建可执行文件
- 没有 DLL 依赖项的静态构建可执行文件
- 当我包含标头时,Gradle不会构建可执行文件
- Xcode 4中的命令行工具构建版本,在构建可执行文件中包含图像存在问题