开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 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
/
UpdateGraphAction.cpp
cpps
/
src
/
UpdateGraphAction.cpp
UpdateGraphAction.cpp 3.55 KB
一键复制 编辑 原始数据 按行查看 历史
duyanning 提交于 2021年04月26日 21:44 +08:00 . windows下修复了与boost 1.76相关的bug
#include "config.h"
#include "UpdateGraphAction.h"
#include "CompilerInfo.h"
UpdateGraphAction::UpdateGraphAction(FileEntityPtr obj)
:
m_obj(obj)
{
}
UpdateGraphActionPtr makeUpdateGraphAction(FileEntityPtr obj)
{
return UpdateGraphActionPtr(new UpdateGraphAction(obj));
}
void split_line_to_items(string line, vector<string>& items)
{
if (cc == CC::VC) {
items.push_back(line);
}
else {
regex item_pat{ R"(([^ \\]|\\ |\\)+)" };
// 这个正则表达式可以从如下文本中匹配出空格分隔的项,但同时把"\ "视为路径的一部分。
/*
C:\Users\duyanning\.cpps\cache\myprj\cpps\test\hello-pch\main.cpp.o:
F:\myprj\cpps\test\hello-pch\main.cpp F:\myprj\cpps\test\hello-pch\std.h
C:\Users\duyanning\Desktop\New\ folder\main.cpp f:/a_c你好/b.h
*/
//cout << "line: " << line << endl;
smatch matches;
while (regex_search(line, matches, item_pat)) {
//cout << " " << matches.str() << endl;
items.push_back(matches.str());
line = matches.suffix();
}
}
}
bool UpdateGraphAction::execute(const DepInfo& info)
{
FileEntityPtr dep = static_pointer_cast<FileEntity>(info.all[0]);
fs::path dep_path = dep->path();
ifstream f(dep_path.string());
/*
读取.d文件的内容。.d文件的例子如下:
C:\Users\duyanning\.cpps\cache\myprj\cpps\test\multiple-srcs\foo.cpp.o: \
F:\myprj\cpps\test\multiple-srcs\foo.cpp \
F:\myprj\cpps\test\multiple-srcs\foo.h
*/
// 下面出现的"到此为止"是为了避免注释中的斜杠引发编译器警告
// .d文件中路径中的空格的处理是个问题。
// mingw会在空格前面加上\ 到此为止
// 如 C:\Users\duyanning\Desktop\New\ folder\main.cpp
// vc不会加
// 如 C:\Users\duyanning\Desktop\New folder\main.cpp \ 到此为止
// mingw还有把多个文件放在一行用空格隔开的情况,而且就在第二行,所以第二行还不能跳过,如:
/*
C:\Users\duyanning\.cpps\cache\myprj\cpps\test\hello-pch\main.cpp.o: \
F:\myprj\cpps\test\hello-pch\main.cpp F:\myprj\cpps\test\hello-pch\std.h \
F:\myprj\cpps\test\hello-pch\foo.h
*/
// 跳过的应该是前两个,而不是前两行。一行可能包含多个。
// vc不会一行多个
// mingw会一行多个,gcc或许也会一行多个。 字母后的空格表示分开多个。反斜杠后的空格,表示路径中的空格。
string line;
int count = 0;
while (getline(f, line)) {
if (line.back() == '\\')
line.pop_back();
boost::algorithm::trim(line);
if (line.empty())
return true;
// 如果把一个空串交给boost_1_76_0的split_line_to_items,得到items里有一个元素。
// 上面return就是为了避免这点。
vector<string> items;
split_line_to_items(line, items);
for (auto item : items) {
count++;
// 跳过前两项
if (count > 2) {
//cout << item << endl;
fs::path p(item);
m_obj->addPrerequisite(makeFileEntity(p));
}
}
}
/*
istream_iterator<string> i = istream_iterator<string>(f);
int count = 0;
while (count < 2) {
if (*i != "\\")
count++;
++i;
}
for (; i != istream_iterator<string>(); ++i) {
string t = *i;
if (t != "\\") {
fs::path p(t);
m_obj->addPrerequisite(makeFileEntity(p));
}
}
*/
return true;
}
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/duyanning/cpps.git
git@gitee.com:duyanning/cpps.git
duyanning
cpps
cpps
master
点此查找更多帮助

搜索帮助

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

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