t.c
#define __CONCAT(x,y) x##y
#ifdef SUFFIX
#define __SUFFIX(x) __CONCAT(x,_)
#else
#define __SUFFIX(x) x
#endif
#ifdef UPPER
#define __c(U,l) __SUFFIX(U)
#else
#define __c(U,l) __SUFFIX(l)
#endif
#define xaxpy __c(XAXPY, xaxpy)
#include <stdio.h>
char* xaxpy;
char* DAXPY;
int main()
{
printf(xaxpy);
printf(DAXPY);
}
e.c
char* xaxpy = "ln";
char* xaxpy_ = "ls";
char* XAXPY = "UN";
char* XAXPY_ = "US";
кажется, что есть способ ввести псевдонимы символов во время соединения, используя --defsym
:
Cetin@BAKA-CHAN ~
$ gcc -D UPPER -D SUFFIX -c t.c e.c
Cetin@BAKA-CHAN ~
$ gcc -o t t.o e.o -Wl,--defsym=_DAXPY=_xaxpy
Cetin@BAKA-CHAN ~
$ ./t
USln
Cetin@BAKA-CHAN ~
$
Должен также быть способ предоставления компоновщику различных сценариев для обработки большого количества таких определений символов. Поэтому я мог бы включить его в процесс сборки для автоматического создания сценариев компоновщика, которые создают сопоставления между различными случаями.