On Fri, Oct 3, 2014 at 2:51 AM, Mohammad Mirzadeh <[email protected]> wrote:
> Hi guys, > > I have to work with remote files on a server that has its own toolchain. > As a result I have configured the project on the server, having its own > .pro and Makefile. > > I'd like to be able to edit and build them remotely on my machine. The > trick i have played here is mounted the server through sshfs and create a > local dummy project that reads the file on the mounted server. To enable > remote building I have created a custom build target like this: > > remote_build.target = remote_build > remote_build.commands = ssh server "make -C $$REMOTE_BUILD_DIR" > QMAKE_EXTRA_TARGETS += remote_build > > this does build the project fine. However, I am not able to use QtCreator > to jump to errors warnings etc since all the error messages have relative > path on the server. I tried to go around this by the following hack: > > remote_build.commands = ssh server "make -C $$REMOTE_BUILD_DIR 2>stderr > 1>stdout; sed -i 's/server_path/locally_mounted_path/g' stderr stdout; cat > stdout; cat stderr 1>&2" > > Now when I build, the error messages do point to the file which is mounted > locally and is open in the editor window. However, QtCreator still cannot > jump to the file, complaining that it does not exist. > > Is what i'm trying to do even feasible? is there any better way of > achieving this? I would really LOVE if Qt Creator had a built-in way of > building remote targets. > > Thanks > > _______________________________________________ > Qt-creator mailing list > [email protected] > http://lists.qt-project.org/mailman/listinfo/qt-creator > > Hi, I wrote the following helper script for a similar use-case. Use it as a proxy for your build command. Should be something like: remote_build.commands = ssh server "cd $$REMOTE_BUILD_DIR && ./translate_err.sh \"$$PWD\" make" ------ #!/bin/sh set -o pipefail normalize() { if [ "x$WINDOWS" = "x1" ]; then sed "s|/|\\\\|g" else cat fi } # Runs $2 (e.g. ./build.sh), and translates paths in stderr from local to remote (given by $1) path if [ $# -lt 2 ]; then echo "usage: $0 <local_path> <build_script> [arguments]" exit 1 fi # Change if script is executed inside a subdirectory LOCAL="$PWD" # Windows -> revert backslashes if echo $1 | grep -q '^.:'; then WINDOWS=1 REMOTE="$(echo "$1" | sed 's|\\|/|g')" else REMOTE="$1" fi shift RUN="$1" shift exec 3>&1 # redirect stderr to stdout and stdout to 3, then restore stdout to stderr $RUN "$@" 2>&1 1>&3 | sed "s|$LOCAL|$REMOTE|g" | normalize 1>&2
_______________________________________________ Qt-creator mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/qt-creator
