开发者

Copy a file to the build directory after compiling project with Qt

开发者 https://www.devze.com 2023-04-13 08:50 出处:网络
I have a file \"settings.ini\" which needs to reside next to the Qt executable. I can add a custom build step for this in Qt开发者_如何学运维 Creator which calls something like this:

I have a file "settings.ini" which needs to reside next to the Qt executable.

I can add a custom build step for this in Qt开发者_如何学运维 Creator which calls something like this:

copy %{sourceDir}/settings.ini %{buildDir}/settings.ini

This works great so far, but I'd like to include this in the *.pro file so I can put this up in our SVN too.

How can I do this using qmake/.pro-files only?


To copy %{sourceDir}/settings.ini to the build directory without requiring to call make install use:

copydata.commands = $(COPY_DIR) $$PWD/settings.ini $$OUT_PWD
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first copydata

$$PWD is the path of current .pro file. If your settings.ini file is not located in the same directory than the project file, then use something like $$PWD/more_dirs_here/settings.ini

Note: I found this solution here. I recommend to read the whole article as it explains how it works.


You probably want to use the INSTALLS keyword in QMake. It will require you to run make install after your build, but it does work cross-platform.

install_it.path = %{buildDir}
install_it.files += %{sourceDir}/settings.ini

INSTALLS += install_it


for osx bundles you can handle it this way see Resource files in OS X bundle

add this to you project file:

APP_QML_FILES.files = path/to/file1.qml path/to/file2.qml
APP_QML_FILES.path = Contents/Resources
QMAKE_BUNDLE_DATA += APP_QML_FILES

this example copies the files to Contents/Resources


Compatible with Windows and Mac OSX Dev environments:

Change {AppName} to respective application name

# Define mac/windows specific target dirs
TARGETDIR = ''
macx {
  TARGETDIR      += $$OUT_PWD/{AppName}.app/Contents/MacOS/
}
else {
  TARGETDIR      += $$OUT_PWD
}

# Directories do not exist for the first build
# Without mkdata, build is successful after 5 tries. To avoid, use mkdata
mkdata.commands = $(MKDIR) $${TARGETDIR}
copydata.commands = $(COPY_FILE) $$PWD/settings.ini $${TARGETDIR}
first.depends = $(first) mkdata copydata
export(first.depends)
export(mkdata.commands)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first mkdata copydata

Happy to add Unix support if someone posts Unix solution in the comments.

0

精彩评论

暂无评论...
验证码 换一张
取 消