首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt/C++ QMake定义带有CLI值的宏

Qt/C++ QMake定义带有CLI值的宏
EN

Stack Overflow用户
提问于 2021-09-24 19:19:56
回答 1查看 110关注 0票数 0

我有一个需要使用API键的应用程序,我不想在源代码中持久化API密钥。我想在构建步骤(嵌入式linux的bitbake进程)期间将API密钥添加到应用程序中。API密钥将在bitbake中定义,并且只有有限的人可以访问服务器。

我不想使用由systemd设置的环境变量或其他类似的方法,最终可以从二进制文件的文本部分或服务文件中读取密钥。同样,这个问题的答案也被用于源代码修改信息,这些信息只能在构建时注入。

我建立了这样的MRE:

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>

#ifndef API_KEY
#define API_KEY ""
#endif

int main(){
    std::cout << "API key is:" <<  API_KEY << "\n";
    return 0;
}

QMake pro文件:

代码语言:javascript
复制
QT += core
TEMPLATE = app
DESTDIR = $${OUT_PWD}
TARGET = test-executable
SOURCES += main.cpp 

在调用qmake时,我将如何重写API_KEY?我试过所有这些变体:

代码语言:javascript
复制
qmake DEFINES+=API_KEY=my_secrect_key
qmake DEFINES+=API_KEY="my_secrect_key"
qmake DEFINES+=API_KEY=\\"my_secrect_key\\"
qmake DEFINES+=API_KEY='my_secrect_key'
qmake DEFINES+='API_KEY=my_secrect_key'
qmake DEFINES+='API_KEY=\\"my_secrect_key\\"'

所有这些都不起作用:

代码语言:javascript
复制
main.cpp:9:40: note: in expansion of macro ‘API_KEY’
    9 |         std::cout << "API key is:" <<  API_KEY << "\n";
EN

回答 1

Stack Overflow用户

发布于 2021-09-24 19:55:49

不能在我手机上测试,但是

代码语言:javascript
复制
qmake DEFINES+=API_KEY=\\\\\\\"my_secrect_key\\\\\\\"

应该能起作用。一个用于转义字符串,另两个用于qmake吃掉一对。并为调用qmake的shell加倍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69320139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档