他のものをコンパイルする前に、ある目標を構築するスクリプトをどのように実行するかについていくつかの方法(例えばQt run script before make)が見つかりました。qmakeでコンパイルする前に実行ファイルを使って複数のヘッダファイルを構築するには?
私は全体の概念を得ていないようです。コンパイルのために生成されたヘッダーファイルが必要なので、すべてをコンパイルする前にスクリプト/実行可能ファイルを呼び出すことによって、いくつかのターゲット(いくつかの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:
どのように私は、次のファイルのように見えるプロで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
}
}
EDIT 1:
私は文を含む前に、次のコードを追加しようとしましたが、動作するようには思えません。 qmakeのを呼び出すとき
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
私は、HEADER2をHEADER1エラーを取得し、header3が見つかりませんでした。コンパイルしようとすると、同様のエラーNo such file or directory
が発生します。私のエコー出力は決して表示されません。だから私は何が間違っているの?
EDIT 2
まあ、私はsystem(command)を見つけました。私は編集1からコンテンツを削除し、INCLUDEPATH
ステートメントの前に次の権利を追加しました。
message(Building headers...)
system(dist\gen_headers.exe headers.h.in):message(Done building headers.)
qmakeを呼び出してプロジェクトをビルドすると、ヘッダーが作成されるようになりました。しかし、1つの問題があります。ヘッダーを作成する際に発行するメッセージのペアが5回表示されます。何故ですか?私はヘッダーを一度しか作成しません。
あなたの投稿にリンクしたのと同じ投稿に続いて、あなたは 'QMAKE_EXTRA_TARGETS + = targetlib1 targetlib2'と' PRE_TARGETDEPS = extra1 extra2'のように、複数のターゲットに対してこうすることができます。これはあなたがやりたいことですか? – Azeem
@Azeemいいえ、これは私が欲しいものではありません。私の実行ファイルは、1回の呼び出しで3つのターゲットすべてを生成します。 – Lilo
多分この答えはあなたを助けることができます:https://stackoverflow.com/a/3626970/6165833 – ymoreau