0

我和一个朋友正在使用 Qt Creator 和 Boost 来构建游戏引擎。到目前为止,我们的想法是引擎将成为一个共享库,我们可以使用测试可执行文件运行它,这将变成我们最终想要制作的游戏。

问题主要是头文件。我想为 Qt Creator 找到某种方法,以便能够在构建引擎的最新版本甚至添加它们时立即识别头文件。起初,我在想一个 Python 脚本,它在构建引擎后作为 Qt Creator 中的构建步骤执行,只需将头文件复制到系统目录(/usr/include例如 - 如果在 *nix 系统上运行),其中然后,IDE 将在将引擎与测试可执行文件链接时识别头文件,并且我们还将拥有完整的自动完成支持。

当然会使用环境变量,虽然我更喜欢在 Linux 中开发,但我的朋友更喜欢 Windows,所以我们同意根据各自的平台偏好来处理开发。

虽然这似乎是一个很好的解决方案,但我认为这个 Python 脚本想法可能已经过时了。有一个更好的方法吗?

更新

从建议的 Qmake 脚本,我最终得到了这个错误。

cp -f "/home/amsterdam/Programming/atlas/Engine/AtlasEngine/"AtlasEngine_global.h "/" 
cp: cannot create regular file `/AtlasEngine_global.h': Permission denied
make: Leaving directory `/home/amsterdam/Programming/atlas/Engine/AtlasEngine__GCC__Linux__Debug'
make: *** [libAtlasEngine.so.1.0.0] Error 1
15:20:52: The process "/usr/bin/make" exited with code 2.
Error while building project AtlasEngine (target: Desktop)
When executing build step 'Make'

我的调整如下:

# Copy over build artifacts
SRCDIR = $$ATLAS_PROJ_ROOT
DESTDIR  = $$ATLAS_INCLUDE

# Look for header files there too
INCLUDEPATH += $$SRCDIR

# Dependencies: mylib. Only specify the libs you depend on.
# Leave out for building a shared library without dependencies.
#win32:LIBS += $$quote($$SRCDIR/mylib.dll)
# unix:LIBS += $$quote(-L$$SRCDIR) -lmylib

DDIR = \"$$SRCDIR/\" #<--DEFAULTS
SDIR = \"$$IN_PWD/\"

# Replace slashes in paths with backslashes for Windows

win32:file ~= s,/,\\,g
win32:DDIR ~= s,/,\\,g
win32:SDIR ~= s,/,\\,g

for(file, HEADERS) {
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t)
}
4

2 回答 2

1

我已经设法使用一些跨平台的 Qmake 魔法克服了这个问题。它将共享库(.dll.so文件)与头文件一起复制到dll当前项目旁边的目录中的目录中。

将其放在.pro文件的末尾并相应地更改路径/库。

# Copy over build artifacts
MYDLLDIR = $$IN_PWD/../dlls
DESTDIR = \"$$MYDLLDIR\"

# Look for header files there too
INCLUDEPATH += $$MYDLLDIR

# Dependencies: mylib. Only specify the libs you depend on.
# Leave out for building a shared library without dependencies.
win32:LIBS += $$quote($$MYDLLDIR/mylib.dll)
 unix:LIBS += $$quote(-L$$MYDLLDIR) -lmylib

DDIR = \"$$MYDLLDIR/\"
SDIR = \"$$IN_PWD/\"
# Replace slashes in paths with backslashes for Windows
win32:file ~= s,/,\\,g
win32:DDIR ~= s,/,\\,g
win32:SDIR ~= s,/,\\,g
for(file, HEADERS) {
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t)
}

然后LD_LIBRARY_PATH在项目的“运行设置”中调整指向同一个dll目录(相对)。

是的,转义带有空格和反斜杠的路径很难看,但我发现这在跨平台上运行良好。Windows (XP, 7) 和 Linux 测试。是的,它包括为运行项目而更改的环境设置,但至少您不再需要外部(Python)脚本或将其安装到需要 root 权限的系统目录。

欢迎改进。

于 2012-09-10T20:39:21.667 回答
0

我不确定其他人是否会对此有疑问,但无论出于何种原因,Qmake 都无法正确访问我的用户指定的环境变量。

因此,既然是这种情况,我想出的一个解决方案是将变量添加为 Qmake 配置变量。

如果您使用的是基于 UNIX 的系统,那么您要做的第一件事就是将 qmake 的位置(应该位于您的 QtSDK 文件夹中)附加到您的系统$PATH中,如下所示:

export PATH=$PATH:/path/to/QtSDK/...../qmake_root

从那里,您可以执行以下操作:

qmake -set "VARIABLE" "VALUE"

在这种情况下,我只是做了:

qmake -set "ATLAS_PROJ_ROOT" $ATLAS_PROJ_ROOT.

然后我在我的 Qmake 项目文件 (.pro) 中访问它:

VAR = $$[ATLAS_PROJ_ROOT]

更多信息可以在这里找到。

于 2012-09-10T23:56:49.110 回答