我有很多c ++程序彼此无关,每个程序只在一个文件中。目录结构如下所示:
dir1
program1.cpp
program1.h
program2.cpp
program2.h
dir2
program3.cpp
program3.h
program4.cpp
program4.h
dir3
program5.cpp
program5.h
program6.cpp
program6.h
..
我正在尝试编写一个shell脚本来编译它们并为可执行文件提供不同的名称。我一直在尝试使用find
,如此:
find . -type f -name *.cpp -exec g++ -llibname '{}' \;
这会编译所有文件,但会为每个文件生成a.out
,所以我最终只得到一个可执行文件。如何剥离文件扩展名并将其作为可执行文件名? (例如program1.cpp
我需要g++ program1.cpp -o program1
)
答案 0 :(得分:3)
你可以这样做:
find . -type f -name '*.cpp' -exec sh -c 'g++ {} -o $(basename {} .cpp)' \;
这会将所有可执行文件放在您启动命令的目录中。如果您希望将它们保存在与源文件相同的目录中,则应执行此操作:
find . -type f -name '*.cpp' -exec sh -c 'g++ {} -o $(dirname {})/$(basename {} .cpp)' \;
(请记住引用文件名模式,否则如果当前目录中有.cpp
文件,则命令将开始中断。)
答案 1 :(得分:1)
您也可以尝试:
find . -type f -name '*.cpp'| sed 's/.cpp$//' | xargs make