如何在项目文件中使用环境变量的值?



我正在尝试将自制库添加到另一个项目中。

根据我现在找不到的另一个答案中的建议,我在 mkspecs/功能中创建了 xyz.prf并添加了

config += xyz

到我的项目文件。

xyz.prf 包含

INCLUDEPATH += $XYZ_INC
DEPENDPATH += $XYZ_INC
win32:CONFIG(release, debug|release): LIBS += -L$XYZ_DIR -llibxyz
else:win32:CONFIG(debug, debug|release): LIBS += -L$XYZ_DIR -llibxyz
else:unix: LIBS += -L$XYZ_DIR -llibxyz

我已经在构建配置中定义了XYZ_INC和XYZ_DIR,并根据需要经常运行 qmake。

但是,当我尝试构建时,链接时出现错误。

g++ -Wl,-rpath,/opt/Qt/5.12.5/gcc_64/lib -o someprogram someprogram.o   -L/home/alan/work/myStuff/sqlPrettyPrinter/v3/build-SQLPPv3-Desktop_Qt_5_12_5_G$$4bit-Debug/test/test_collationname/../../libsqlpp/ -llibsqlpp -LYZ_DIR -llibxyz /opt/Qt/5.12.5/gcc_64/lib/libQt5Test.so /opt/Qt/5.12.5/gcc_64/lib/libQt5Core.so -lpthread   
/usr/bin/ld: cannot find -llibxyz

现在,查看 g++ 命令行,我看到-LYZ_DIR它解释了为什么ld找不到 libxyz - 它应该是-L$XYZ_DIR-L<whatever XYZ_DIR expands to>

我尝试了$或CC_6和XYZ_DIR{XYZ_DIR}(XYZ_DIR)的所有组合。没有一个工作,除了上述组合之外,所有组合最终都会生成"-L"(没有任何目录(。

生成所需内容的正确语法是什么?

抱歉 - 这个问题最终比预期的要长;但是,我想不出可以合理缩短它的方法。

正如文档指出的那样,必须使用$$(...)来获取环境变量:

变量

可用于存储环境变量的内容。这些可以在运行 qmake 时进行评估,也可以包含在生成的 Makefile 中,以便在生成项目时进行评估。

若要在运行 qmake 时获取环境值的内容,请使用 $$(...( 运算符:

DESTDIR = $$(PWD)
message(The project will be installed in $$DESTDIR)

xyz.prf

INCLUDEPATH += $$(XYZ_INC)
DEPENDPATH += $$(XYZ_INC)
win32:CONFIG(release, debug|release): LIBS += -L$$(XYZ_DIR) -llibxyz
else:win32:CONFIG(debug, debug|release): LIBS += -L$$(XYZ_DIR) -llibxyz
else:unix: LIBS += -L$$(XYZ_DIR) -llibxyz

对于前面的代码元素,它仅在执行 qmake 时应用,但如果您希望使用 make 命令执行它,则必须按照文档所示使用$(...)

获取环境值的内容,在 生成的生成文件被处理,使用 $(...( 运算符:

DESTDIR = $$(PWD)
message(The project will be installed in $$DESTDIR)
DESTDIR = $(PWD)
message(The project will be installed in the value of PWD)
message(when the Makefile is processed.)

xyz.prf

INCLUDEPATH += $(XYZ_INC)
DEPENDPATH += $(XYZ_INC)
win32:CONFIG(release, debug|release): LIBS += -L$(XYZ_DIR) -llibxyz
else:win32:CONFIG(debug, debug|release): LIBS += -L$(XYZ_DIR) -llibxyz
else:unix: LIBS += -L$(XYZ_DIR) -llibxyz

最新更新