Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 如何将bash脚本与makefile中的\n(新行)一起使用_Sed_Makefile_Compilation - Fatal编程技术网

Sed 如何将bash脚本与makefile中的\n(新行)一起使用

Sed 如何将bash脚本与makefile中的\n(新行)一起使用,sed,makefile,compilation,Sed,Makefile,Compilation,我编写了一个代码,其中有几个选项可以在.h文件(define.h)中激活。我希望我的代码的编译版本生成一个文件(例如define.dat),并在执行时将定义的部分写入其中(以跟踪我们使用了什么或没有使用什么) 到目前为止,我设法制作了一个sed脚本,将文件转换为我想要呈现的格式 echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ \\\n/'` '"' > define

我编写了一个代码,其中有几个选项可以在
.h
文件(define.h)中激活。我希望我的代码的编译版本生成一个文件(例如define.dat),并在执行时将定义的部分写入其中(以跟踪我们使用了什么或没有使用什么)

到目前为止,我设法制作了一个
sed
脚本,将文件转换为我想要呈现的格式

echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ \\\n/'` '"' > define.dat
这是我从中学到的

const char *s = {
#include "define.dat"
};
我可以在编译时在代码中实现它

第一个脚本在Bash环境中运行良好(请注意,double
$
不是必需的),但是,当我将其放入makefile(需要double
$
)时,
\n
被解释为换行符。因此,编译器会给出错误


有什么建议或新方法吗?

我找到了一个小的解决办法,但并不满意。我使用
-
作为分隔符

echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ - /'` '"' > define.dat
而不是

const char *s = {
  #include "define.dat"
};
我曾经

char s[] = {
#include "define.dat"
};

for (i=0 ; s[i] ; i++)
  if (s[i] == '-')
    s[i] = '\n';

if ((fout = fopen("define.dat","w")) == NULL)
  fprintf(stderr,"Error in creating define.dat\n");
else
{
  fprintf(fout,s);
  fclose(fout);
}

要用
\n

替换所有
-
,我找到了一个小的解决方法,但是,我并不满意。我使用
-
作为分隔符

echo '"' `cat define.h | grep '#def' | grep -v '//#def' | sed 's;/.*$$;;' | sed 's/$$/ - /'` '"' > define.dat
而不是

const char *s = {
  #include "define.dat"
};
我曾经

char s[] = {
#include "define.dat"
};

for (i=0 ; s[i] ; i++)
  if (s[i] == '-')
    s[i] = '\n';

if ((fout = fopen("define.dat","w")) == NULL)
  fprintf(stderr,"Error in creating define.dat\n");
else
{
  fprintf(fout,s);
  fclose(fout);
}

要将所有的
-
替换为
\n

MCVE,请:和更多信息()
cat | grep | grep | sed | sed | sed
是七宗罪之一。MCVE:和更多信息()
cat | grep | sed | sed | sed
是七宗罪之一。