如何在Linux中为可执行文件提供图标? [已关闭]

问题描述 投票:0回答:2

问题:

如何在Linux中为可执行文件提供图标,在Windows中我们可以使用windres,但是Linux中的等效项是什么?

重要细节:

OS : Linux Mint
Text Editor : VScode
Building way : Makefile
The code down below as nothing special, it is just for test purpose.

Makefile内容:

CC = g++
CFLAGS = -std=c++23 -D_GNU_SOURCE

PROJECT: main.o
    $(CC) $(CFLAGS) $^ -o $@

main.o: main.cpp
    $(CC) $(CFLAGS) -c $^ -o $@

主.cpp:

#include <iostream>

int main(){
    std::cout << "1234" << std::endl;
    return 0;
}
c++ linux makefile
2个回答
3
投票

正如OP尝试的那样

asprintf()
,也许像:

char *ptr = NULL;
asprintf(&ptr, "%d", some_int);

使用 INT_STRING_SIZE

char ptr[INT_STRING_SIZE];
sprintf(ptr, "%d", some_int);

要将其用作函数调用中的单行代码,请形成一个辅助函数和宏:

#include <assert.h>
#include <limits.h>
#include <stdio.h>

#define LOG10_2_N 28
#define LOG10_2_D 93
#define INT_STRING_SIZE ((sizeof(int)*CHAR_BIT - 1)*LOG10_2_N/LOG10_2_D + 3)

char* my_itoa(char buf[INT_STRING_SIZE], int i) {
  int len = snprintf(buf, INT_STRING_SIZE, "%d", i);
  assert(len > 0 && (unsigned) len < INT_STRING_SIZE);
  return buf;
}

#define MY_ITOA(i) my_itoa((char [INT_STRING_SIZE]){""}, (i))

并用作

int main() {
  void myFunction(char *); 
  myFunction(MY_ITOA(1000));
  myFunction(MY_ITOA(-1000));
  myFunction(MY_ITOA(42));

  void myFunction2(char *a, char *b); 
  myFunction2(MY_ITOA(1000), MY_ITOA(2000));
}

这适用于 C99 标准及更高版本。它使用

(char [INT_STRING_SIZE]){""}
,一个复合文字。提供的字符串在代码块结束之前有效。不需要
free()
之类的代码。


0
投票

如果您允许使用 GNU C 扩展,您可以使用 表达式中的语句和声明

foo( ({ char buf[32]; snprintf(buf, sizeof buf, "%i", 1000); strdup(buf); }) );

或使用

asprintf()
:

foo( ({ char *p; asprintf(&p, "%i", 1000); p; }) );

您必须稍后分配字符串以避免内存泄漏。

    

© www.soinside.com 2019 - 2024. All rights reserved.