开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
forked from duyanning/cpps
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (5)
master
user-defined-rule
clang
v0.3.0
v0.2.0
v0.1.2
v0.1.1
v0.1.0
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (3)
标签 (5)
master
user-defined-rule
clang
v0.3.0
v0.2.0
v0.1.2
v0.1.1
v0.1.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (5)
master
user-defined-rule
clang
v0.3.0
v0.2.0
v0.1.2
v0.1.1
v0.1.0
cpps
/
src
/
UserDefinedRule.cpp
cpps
/
src
/
UserDefinedRule.cpp
UserDefinedRule.cpp 5.66 KB
一键复制 编辑 原始数据 按行查看 历史
duyanning 提交于 2020年02月26日 01:00 +08:00 . 增加了宏指令支持
#include "config.h"
#include "global.h"
#include "UserDefinedRule.h"
#include "InfoPackageScanned.h"
#include "helpers.h"
void populate_a_rule(
UserDefinedRule& rule,
const vector<string>& target_vector,
const vector<string>& prerequisite_vector,
vector<string> commands
)
{
// todo:在此处进行变量展开,展开之后再看是否绝对路径
// todo: 如果是绝对路径,就不要跟当前目录拼接了。
// 应该支持这样的变量:$(SHADOWDIR)
// 将其替换为shadow(rule.dir)的结果
for (auto t : target_vector) {
expand_variable(t, rule.dir);
fs::path path{ t };
if (path.is_absolute()) {
rule.targets.push_back(path);
}
else {
fs::path a = rule.dir;
a /= t;
rule.targets.push_back(a);
}
}
for (auto p : prerequisite_vector) {
//fs::path a = rule.dir;
//a /= p;
//rule.prerequisites.push_back(a);
expand_variable(p, rule.dir);
fs::path path{ p };
if (path.is_absolute()) {
rule.prerequisites.push_back(path);
}
else {
fs::path a = rule.dir;
a /= p;
rule.prerequisites.push_back(a);
}
}
//{
// rule.commands.push_back(recipe);
//}
for (auto& c : commands) {
expand_variable(c, rule.dir);
}
rule.commands = commands;
}
// 各部分的命名可参考 https://www.gnu.org/software/make/manual/make.html#Rule-Introduction
void process_user_defined_rule(fs::path src_path, string rule_string, InfoPackageScanned& pack)
{
//cout << rule_string << endl;
// 形如 ui.cpp ui.h : ui.fl // fluid -c ui.fl
// ui.cpp ui.h : ui.fl 叫dependency relationship。冒号前的叫targets,冒号后的叫prerequisites
// fluid -c ui.fl 叫recipe,可由多个command组成
// 分离dependency relationship与recipe部分
auto slash_slash_pos = rule_string.find("//");
string dependency_relationship = rule_string.substr(0, slash_slash_pos);
boost::algorithm::trim(dependency_relationship);
string recipe = rule_string.substr(slash_slash_pos + 2);
boost::algorithm::trim(recipe);
//cout << dependency_relationship << endl;
//cout << recipe << endl;
// 分离dependency relationship中的targets与prerequisites
auto colon_pos = dependency_relationship.find(":");
string targets = dependency_relationship.substr(0, colon_pos);
boost::algorithm::trim(targets);
string prerequisites = dependency_relationship.substr(colon_pos + 1);
boost::algorithm::trim(prerequisites);
//cout << targets << endl;
//cout << prerequisites << endl;
// 分离dependency relationship中的各个target
vector<string> target_vector;
std::string target_delimiters(" "); // 支持多个分界符
boost::split(target_vector, targets, boost::is_any_of(target_delimiters), boost::token_compress_on); // token_compress_on是为了将单词之间的多个空格视为一个
//for (auto t : target_vector) {
// cout << ">>>" << t << "<<<" << endl;
//}
// 分离prerequisites中的各个prerequisite
vector<string> prerequisite_vector;
std::string prerequisite_delimiters(" "); // 支持多个分界符
boost::split(prerequisite_vector, prerequisites, boost::is_any_of(prerequisite_delimiters), boost::token_compress_on); // token_compress_on是为了将单词之间的多个空格视为一个
//for (auto p : prerequisite_vector) {
// cout << ">>>" << p << "<<<" << endl;
//}
UserDefinedRule rule;
rule.dir = src_path;
rule.dir.remove_filename();
populate_a_rule(rule, target_vector, prerequisite_vector, { recipe });
pack.user_defined_rules.push_back(rule);
}
void process_user_defined_rule_multi_lines(fs::path src_path, string dependency_relationship,
vector<string> commands, InfoPackageScanned& pack)
{
// 分离dependency relationship中的targets与prerequisites
auto colon_pos = dependency_relationship.find(":");
string targets = dependency_relationship.substr(0, colon_pos);
boost::algorithm::trim(targets);
string prerequisites = dependency_relationship.substr(colon_pos + 1);
boost::algorithm::trim(prerequisites);
//cout << targets << endl;
//cout << prerequisites << endl;
// 分离dependency relationship中的各个target
vector<string> target_vector;
std::string target_delimiters(" "); // 支持多个分界符
boost::split(target_vector, targets, boost::is_any_of(target_delimiters), boost::token_compress_on); // token_compress_on是为了将单词之间的多个空格视为一个
//for (auto t : target_vector) {
// cout << ">>>" << t << "<<<" << endl;
//}
// 分离prerequisites中的各个prerequisite
vector<string> prerequisite_vector;
std::string prerequisite_delimiters(" "); // 支持多个分界符
boost::split(prerequisite_vector, prerequisites, boost::is_any_of(prerequisite_delimiters), boost::token_compress_on); // token_compress_on是为了将单词之间的多个空格视为一个
//for (auto p : prerequisite_vector) {
// cout << ">>>" << p << "<<<" << endl;
//}
UserDefinedRule rule;
rule.dir = src_path;
rule.dir.remove_filename();
//for (auto t : target_vector) {
// fs::path a = rule.dir;
// a /= t;
// rule.targets.push_back(a);
//}
//for (auto p : prerequisite_vector) {
// fs::path a = rule.dir;
// a /= p;
// rule.prerequisites.push_back(a);
//}
//
//rule.commands = commands;
populate_a_rule(rule, target_vector, prerequisite_vector, commands);
pack.user_defined_rules.push_back(rule);
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

C++脚本(伪)解释器/C++项目(零Makefile)构建系统引擎/支持GCC, MinGW, Visual C++, Clang Pseudo Interpreter for C++ Script / C++ Project Build System Engine with Zero Makefiles / Supporting GCC, MinGW, Visual C++, Clang
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/luozhiping/cpps.git
git@gitee.com:luozhiping/cpps.git
luozhiping
cpps
cpps
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /