Page tree
Skip to end of metadata
Go to start of metadata

命令行编译C文件

编写hello.c文件,内容如下:

#include <stdio.h>
int main(int argc, char* argv)
{
	printf("Hello, world!");
}

编译hello应用

$CC hello.c -o hello
file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=b6a98060e4d0423c65a477d0a0d74cb183441648, not stripped

这里必须要用$CC变量来编译,不能直接用gcc名称。编译后可以使用file命令来查看文件是否为ARM架构来确认编译器正确,然后复制hello可执行文件到PanGu开发板上,直接运行就可以了。


CMake工具构建C语言项目

很多时候,我们使用C语言开发应用程序,会对项目的功能进行模块化分类,也就会有多个C文件。这里我们推荐使用CMake工具来对项目进行管理。同样我们使用上面例子中的hello.c文件,通过编写CMake命令相应的配置文件来达到编译的目的。


编写CMakeLists.txt文件,内容如下

project (test)

add_executable(hello hello.c)

这里声明了,该项目名称为test,将名为 hello.c 源文件编译成一个名称为 hello 的可执行文件。

下面使用cmake命令来构建这个简单的test项目。

$ tree
.
├── CMakeLists.txt
└── hello.c
$ mkdir build
$ cd build
$ cmake ..
-- Toolchain file defaulted to '/home/i2som/workspace/pangu-weston/2.6-snapshot/sysroots/x86_64-openstlinux_weston_sdk-linux/usr/share/cmake/OEToolchainConfig.cmake'
-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Check for working C compiler: /home/i2som/workspace/pangu-weston/2.6-snapshot/sysroots/x86_64-openstlinux_weston_sdk-linux/usr/bin/arm-openstlinux_weston-linux-gnueabi/arm-openstlinux_weston-linux-gnueabi-gcc
-- Check for working C compiler: /home/i2som/workspace/pangu-weston/2.6-snapshot/sysroots/x86_64-openstlinux_weston_sdk-linux/usr/bin/arm-openstlinux_weston-linux-gnueabi/arm-openstlinux_weston-linux-gnueabi-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/i2som/workspace/pangu-weston/2.6-snapshot/sysroots/x86_64-openstlinux_weston_sdk-linux/usr/bin/arm-openstlinux_weston-linux-gnueabi/arm-openstlinux_weston-linux-gnueabi-g++
-- Check for working CXX compiler: /home/i2som/workspace/pangu-weston/2.6-snapshot/sysroots/x86_64-openstlinux_weston_sdk-linux/usr/bin/arm-openstlinux_weston-linux-gnueabi/arm-openstlinux_weston-linux-gnueabi-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/i2som/workspace/test/build

$ make
Scanning dependencies of target hello
[ 50%] Building C object CMakeFiles/hello.dir/hello.c.o
[100%] Linking C executable hello
[100%] Built target hello

最终会生成hello可执行文件。上面在构建前先创建build目录,是因为中会产生一些中间文件,为了源代码目录和构建目录保持干净,这样即便构建后不需要,可以直接删除build目录即可。

更多CMake工具的使用,可以参考构建工具


  • No labels