1

我有很多彼此无关的 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

4

2 回答 2

4

你可以这样做:

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在当前目录中有文件,您的命令将开始中断。)

于 2013-03-18T10:00:48.250 回答
1

你也可以试试:

find . -type f -name '*.cpp'| sed 's/.cpp$//' | xargs make
于 2013-03-18T10:39:28.563 回答