小编Kan*_*bin的帖子

如何自定义cmake输出

例如,在编译.c文件时,我希望cmake只是打印

CC    xxx.c
Run Code Online (Sandbox Code Playgroud)

到stdout,就像linux kbuild一样.

cmake build-system

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

为什么这个 __METHOD__NAME__ 需要内存副本?

这个想法来自/sf/answers/1104286361/

我在 string_view 末尾添加了一个 '\0',这样我们就可以将 data() 用于 printf、spdlog 等。

我使用这个宏来打印带有类名的函数名。

但是,我发现编译器不够智能,无法内联字符串,而是需要先进行内存复制才能堆栈:

https://godbolt.org/z/bqob37G3z

请参阅 main 函数中 CALL 和 CALLFUNC 的区别。

是否可以告诉编译器将字符串放在某个 RO 部分中,例如 const char *?

template<std::size_t N>
consteval const std::array<char, N> __get_function_name(const char * arr)
{
    std::array<char, N>         data {};
    std::string_view            prettyFunction(arr);
    size_t                      bracket = prettyFunction.rfind("(");
    size_t                      space = prettyFunction.rfind(" ", bracket) + 1;
    size_t                      i;

    for (i = 0; i < bracket - space; i += 1) {
        data[i] = arr[space + i];
    }
    data[i] = '\0';

    return …
Run Code Online (Sandbox Code Playgroud)

c++ classname

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

标签 统计

build-system ×1

c++ ×1

classname ×1

cmake ×1