小编sti*_*ate的帖子

Makefile(自动依赖生成)

只是为了快速术语:

#basic makefile rule
target: dependencies
    recipe
Run Code Online (Sandbox Code Playgroud)

问题:我想自动生成依赖项.

例如,我希望转此:

#one of my targets
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
    $(COMPILE)
Run Code Online (Sandbox Code Playgroud)

进入:

#one of my targets
file.o: $(GENERATE)
    $(COMPILE)
Run Code Online (Sandbox Code Playgroud)

而且我不太确定它是否可能......

我所知道的:

我可以使用这个编译器标志:

g++ -MM file.cpp
Run Code Online (Sandbox Code Playgroud)

它将返回正确的目标和依赖.
所以从示例中,它将返回:

file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h  
Run Code Online (Sandbox Code Playgroud)

但是,'make'不允许我在规则的目标或依赖部分中显式编写shell代码:(
我知道有一个'make'函数叫做shell

但我不能完全插入这个依赖并解析魔法,因为它依赖于表示目标的宏$ @或者至少我认为这就是问题所在

我甚至尝试用这个makefile函数替换"file.cpp"依赖项,但这也无效.

#it's suppose to turn the $@ (file.o) into file.cpp
THE_CPP := $(addsuffix $(.cpp),$(basename $@))

#one of my targets …
Run Code Online (Sandbox Code Playgroud)

dependencies gnu makefile

25
推荐指数
4
解决办法
2万
查看次数

具有GPos字符文件解析器的字符串表格支持渲染字形

我正在寻找一种从字体文件(.ttf,.otf)中提取字形位图,字形度量和字距调整数据的方法,并支持GPos字距表.

我以前使用过FreeType Library,但它不支持GPos Tables.

fonts freetype text-rendering kerning

7
推荐指数
1
解决办法
287
查看次数

如何使用 serde 将结构序列化为另一个 Rust 数据结构?

我有一个数据结构Document,我想将其他 Rust 结构序列化为它。它基本上是HashMap内部字段的a ,但是它与数据库 API 交互,所以我肯定想将其他类型转换为那些Documents。

例如这个结构

struct Entry {
    id: String,
    user: String,
    duration: u32,
    location: (f64, f64),
}
Run Code Online (Sandbox Code Playgroud)

我已经Document使用Fromtrait进行了类型转换,但是这是一个额外的地方,当Entry结构改变时我必须修改。实现使用 aDocumentBuilder并且看起来像这样:

impl From<Entry> for Document {
    fn from(entry: Entry) -> Self {
        Document::builder()
            .name(&entry.id)           // set the name of the document
            .field("user", entry.user) // add fields ...
            .field("duration", entry.duration)
            .field("location", entry.location)
            .build()                   // build a Document

    }
}
Run Code Online (Sandbox Code Playgroud)

该field方法可以将任何可以转换为 a 的值分配FieldValue给一个键。所以签名 …

rust serde

7
推荐指数
1
解决办法
2573
查看次数

C++如何管理连续动态数组的迭代器

我一直试图找出一种管理动态数组的有效方法,我可能偶尔会改变它,但是想要经常随机访问和迭代.

我希望能够:

  • 将数组存储在连续数据块中(减少缓存未命中)
  • 单独访问每个元素并独立于数组句柄(指针>索引)
  • 调整数组大小(动态)

因此,为了实现这一点,我一直在尝试使用std::vector<T>::iterator,并且它工作得非常好,直到最近,当我调整向量(例如调用push_back())时,我正在存储迭代器.所有迭代器都变得无效,因为它们指向过时的内存.

是否有任何有效的(可能是STL-)方法来保持迭代器指针的最新状态?或者我是否必须手动更新每个迭代器?

这整个方法是否值得?我应该坚持指数吗?

编辑:我之前使用过指数并且没问题,但是我改变了我的方法因为它仍然不好.我总是要把整个数组拖到范围内,索引可以很容易地用于任何数组.也没有完美的方法来定义"NULL"索引(我都不知道).

更新所有指针以及调整大小操作的选项怎么样?您所要做的就是存储原始文件vector::begin,调整大小vector,然后更新所有指针vector.begin() + (ptr - prevBegin)并调整操作大小已经是您应该尽量避免的.

c++ arrays pointers memory-management stl

6
推荐指数
1
解决办法
565
查看次数

为什么OpenGL不支持多索引缓冲?

为什么OpenGL不支持顶点属性的多个索引缓冲区?

对我而言似乎非常有用,因为您可以重用属性,并且您可以更好地控制几何体的渲染.

有没有理由为什么所有属性数组都必须使用相同的索引,或者在不久的将来可以使用此功能?

opengl indexing graphics gpu

5
推荐指数
1
解决办法
145
查看次数

如何仅自动跟踪 git 分支上的特定文件

我有一个 master 分支和几个工作分支,每个分支都应该实现一个特定的功能,然后合并到 master 中并删除。

我遇到的问题是工作分支跟踪所有也在 master 上的文件,每当 master 更新时,我必须手动将 master 合并到所有其他工作分支以保持它们最新,即使没有与工作分支功能相关的文件受到影响。

是否有一种策略,我只能跟踪分支上的特定文件,而让其他文件可以自由地由其他分支更新?有没有比使用 .gitignore 更好的方法,它总是必须手动更新以忽略/包含特定文件?我只想自动跟踪那些在该分支上提交了更改的文件。

git version-control branch branching-and-merging

3
推荐指数
1
解决办法
973
查看次数

如何在类空间中为成员函数取别名?

我希望能够从类的对象中通过多个名称调用相同的成员函数。

例如:

#include <string>
#include <stdio.h>

class Log
{
public:
    Log(std::string str)
        : log(str)
    {}

    void print() const
    {
        puts(log.c_str());
    }
    const auto& output = print;    // attempting to alias. does not work

private:
    std::string log;
};

int main()
{
    Log log("LOG: Log started.");
    log.print();
    log.output();    // both should call the same function.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码为我产生此错误(gcc 7.3.0)

main.cpp:15:15: error: non-static data member declared with placeholder ‘const auto’
         const auto& output = print;    // attempting to alias. does not work …
Run Code Online (Sandbox Code Playgroud)

c++ alias class function member-functions

2
推荐指数
1
解决办法
2648
查看次数

Windows下的_stat()如何正常工作

在我的代码中,我尝试使用_stat()获取文件的权限。目前,我想在Windows下运行它。方法如下:

bool CFile::Private::checkPermissions(std::string sFilename, CFile::EOpenmode iOpenmode)
{
  std::string sErrMsg = "";
  bool bResult = true;
  struct _stat buf;
  int iResult = 0;

  // Get data associated with "crt_stat.c": 
  iResult = _stat( sFilename.c_str(), &buf );

  // Check if statistics are valid: 
  if( iResult != 0 )
  {
    switch (errno)
    {
      case ENOENT:
        sErrMsg = "File: " + sFilename + " not found.";
        break;
      case EINVAL:
        sErrMsg = "Invalid parameter to _stat(filename, &buf).";
        break;
      default:
        /* Should never be reached. */
        sErrMsg …
Run Code Online (Sandbox Code Playgroud)

c++ windows stat

1
推荐指数
1
解决办法
1万
查看次数

如何在bash脚本中使用fish别名

我有一个bash脚本,我想在其中使用一个命令,该命令是我在config.fish这样定义的:

alias setbg='feh --bg-fill'
Run Code Online (Sandbox Code Playgroud)

但是,当我在bash脚本中使用命令时,会得到:

setbg: command not found
Run Code Online (Sandbox Code Playgroud)

如何使鱼别名对bash脚本可见?

bash shell scripting fish

0
推荐指数
1
解决办法
53
查看次数