我和朋友正在使用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)
}
答案 0 :(得分: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权限的系统目录中。
欢迎改进。
答案 1 :(得分: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]
可以找到更多信息here。