一行Shell脚本实现C/C++文件的自动编译

需积分: 5 0 下载量 46 浏览量 更新于2024-12-30 收藏 13KB ZIP 举报
资源摘要信息:"此脚本提供了一种快速编译单个C或C++源文件的方法,通过识别文件的扩展名,脚本会使用相应的名称作为目标文件名,并根据文件是C语言源文件还是C++语言源文件,分别使用gcc或g++编译器进行编译。该过程简洁高效,只通过一行命令即可完成编译。需要注意的是,该脚本使用了C++11标准选项进行编译,以支持C++11的语言特性。" 知识点详细说明: 1. 脚本语言和使用场景: 该脚本使用Shell语言编写,适用于在类Unix操作系统环境下运行。脚本旨在简化编译过程,允许用户通过一条简单的命令直接编译C或C++源代码文件。这在进行快速测试或小型项目开发时尤其有用。 2. 编译器选择与编译过程: - 对于C语言文件(扩展名为.c),脚本使用gcc编译器进行编译。 - 对于C++语言文件(扩展名为.cpp),脚本使用g++编译器进行编译。 3. 编译选项与C++标准: 脚本中为C++编译设置了C++11标准选项。这意味着所有的C++源文件都将按照C++11标准进行编译,允许使用C++11新增的语言特性和库。 4. 文件命名规则: 脚本根据输入文件的扩展名来识别文件类型,并据此构建输出的目标文件名。 - C语言文件被编译为以".ccbin"为扩展名的目标文件。 - C++语言文件被编译为以".cpp.bin"为扩展名的目标文件。 这种命名约定可能是为了避免与源文件名冲突,并且可以清晰地标识编译输出文件。 5. 使用注意事项: 尽管脚本提供了快速编译的便捷性,但是使用该脚本时需要了解其背后的命令,确保不会对项目构建或文件系统造成意外的影响。用户需要对Shell脚本和编译选项有一定的了解,以确保正确使用。此外,脚本中提到了“使用风险自负”,这意味着脚本可能没有做足够的错误处理和检查,因此在生产环境中使用前应进行充分的测试。 6. 脚本实现原理: 脚本可能通过Shell命令行参数(如$1, $2等)接收源文件名作为输入,然后利用Shell脚本的字符串处理功能提取文件扩展名。接着,根据扩展名和上述规则构造编译命令,调用gcc或g++编译器执行编译。最终,生成的目标文件名是根据输入的源文件名动态构建的。 7. 编译命令示例: 假设脚本的使用方法是将源文件名作为参数传递给脚本,例如: ```bash ./Compile-c-or-cpp-in-one-line-main file_name.c ``` 则脚本会生成如下编译命令: ```bash gcc file_name.c -o file_name.ccbin ``` 对于C++文件,命令可能如下: ```bash g++ file_name.cpp -o file_name.cpp.bin ``` 并根据C++11标准选项进行编译: ```bash g++ file_name.cpp -std=c++11 -o file_name.cpp.bin ``` 综上所述,该脚本为开发者提供了一个方便快捷的编译方法,特别是在需要频繁测试代码时。然而,为了安全和效率,了解脚本的工作机制和潜在风险是非常重要的。在将该脚本用于关键项目之前,建议充分测试以确保其满足项目需求,并且不会引入不可预见的错误。

Command line: -prefix /home/liuyh/workspace/qt5.14.2-arm -opensource -confirm-license -release -strip -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -c++std c++11 --rpath=no -pch -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpurchasing -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtwayland -skip qtwebengine -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -make libs -make examples -nomake tools -nomake tests -gui -widgets -dbus-runtime --glib=no --iconv=no --pcre=qt --zlib=qt -no-openssl --freetype=qt --harfbuzz=qt -no-opengl -linuxfb --xcb=no -tslib --libpng=qt --libjpeg=qt --sqlite=qt -plugin-sql-sqlite -I/opt/tslib/include -L/opt/tslib/lib -recheck-all executing config test machineTuple + arm-linux-gnueabi-g++ -dumpmachine > sh: 1: arm-linux-gnueabi-g++: not found test config.qtbase.tests.machineTuple FAILED executing config test verifyspec + cd /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/config.tests/verifyspec && /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" 'QMAKE_LIBDIR += /opt/tslib/lib' 'INCLUDEPATH += /opt/tslib/include' -early "CONFIG += cross_compile" /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec + cd /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make > rm -f verifyspec.o > rm -f *~ core *.core > arm-linux-gnueabi-g++ -c -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -pipe -O2 -w -fPIC -I/home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec -I. -I/opt/tslib/include -I/home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-arm-gnueabi-g++ -o verifyspec.o /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec/verifyspec.cpp > make:arm-linux-gnueabi-g++:命令未找到 > make: *** [Makefile:172:verifyspec.o] 错误 127

263 浏览量