c++ - 如何将实用程序 (grep/sed) 的返回值分配给数组?

标签 c++ arrays bash shell sed

我正在尝试创建一个 shell 脚本来制作 Makefile。我的策略是创建两个数组,一个包含所有.cpp 文件,另一个包含.cpp 后缀替换为.o。然后,我将 (grep | sed) 的返回值中的 .h 和 .ccp 文件分配给变量 temp,然后打印数组。但是我不断收到错误消息: “语法错误:无效的算术运算符(错误标记为“.o” 我的理论是 grep 的返回值没有正确存储在 temp 中 我对 bash 很陌生

cppfield=$(ls *.cpp)
x=0
for i in *.cpp; do
  ofield[$x]="${i%.cpp}.o"
done


echo "$1 : ${ofield[@]}" > Makefile
echo "  g++ -ansi -Wall -g -o $1 ${ofield[@]}" >> Makefile

for i in "${ofield[@]}"; do
  temp=$(grep '#include "' ${cppfield[i]} | sed s/#include// | sed s/\"//g)
  echo "${ofield[i]} : ${cppfield[i]} ${temp[@]}" >> Makefile
  echo "    g++ -ansi -Wall -g -c ${cppfield[i]}" >> Makefile
done

最佳答案

您要做的是找到依赖项,这可能通过 g++ -MM 更好地完成 - 它会为您指定的文件生成一个依赖项列表,您可以将其包含/在 makefile 中使用。

看这个文件的底部,我的 makefile 经常包含这样的东西:

include .depends

.depends: Makefile ${SOURCES}
    ${CXX} -MM ${CXXFLAGS} ${SOURCES} > $@

完整文件: https://github.com/Leporacanthicus/lacsap/blob/master/Makefile

在您执行以下操作之前,您的 grep 解决方案工作得相当好:

 #if _WIN32
 #include <windows.h>
 #else
 #include <someother.h>
 #endif

 /* Don't need this any more...
 #include "blah.h
 */

关于c++ - 如何将实用程序 (grep/sed) 的返回值分配给数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166712/

相关文章:

c++ - LNK2001 在 VS 2013 (MSVC 18) 但不是在 VS 2015 (MSVC 19)

arrays - 为什么我不能返回任意字符串数组?

javascript - return false 或 return true 不会跳到 jQuery 中的下一个循环

linux - 如何使用 bash 脚本计算单词中出现次数最多的 3 个字母序列

linux - shell程序无法运行

linux - 排除日志中的 grep 文件名

c++ - 为什么第一个原型(prototype)是正确的而第二个是不正确的?

c++ - C++ 中的 "-->"运算符是什么?

C++、TR1、正则表达式和 boost

vb.net - 如何在VB.NET中创建新数组?