add_executable:将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件 2、开始构建 所有的文件创建完成后,demo1目录中应该存在main.c和CMakeLists.txt...(注意,..代表父目录)查看一下build目录,就会发现了生成了编译需要的Makefile以及其他的中间文件。 (3)、运行make构建工程,就会在当前目录(build目录)中获得目标文件demo。...更省事的方法是使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。...中的源文件需要编译成一个名称为 demo 的可执行文件。...例如,可以将 calc 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的函数来进行运算。否则就调用标准库中的运算符进行操作。 还是之前的代码,在此基础上进行增删。
简化编译构建过程和编译过程,工具链也非常简单:cmake+make。 高效率,比autotools效率快。主要原因:CMake在工具链中没有libtool。...SOURCE_LIST 中定义的源文件列表 内部构建和外部构建 在上面的例程中,我们是采用的内部构建,会看到cmake生成的临时文件比我们编写的源文件还要多,而且在同一级目录下。...外部构建简单理解就是将cmake生成的中间文件与源文件分离。不让他们同一级目录。...过程:创建目录build,然后在build目录下执行cmake,将构建的中间文件生成到build下,这样源文件就很干净。...EXCLUDE_FROM_ALL参数的含义是将这个目录从编译过程中排除,比如,工程的example,可能就需要工程构建完成后,再进入example目录单独进行构建(当然,你也可以通过定义依赖来解决此类问题
平时直接使用IDE开发,所以对整个编译的过程了解的不深入,借此机会,在接下来的文章中可能会涉及到程序如何从文本文件到屏幕上的字节流输出。...文件结构 如未安装,使用sudo apt install tree命令安装。 使用tree -L 1 命令以树状图列出目录的内容(也可只使用tree命令)。...tree -L N 以树状图显示所有文件,子文件夹显示到第 N 层 效果如下: ? 3....编译步骤: cd source(CMakeLists.txt所在目录) cmake . make ①文件及所在目录 image.png ②终端改变目录,执行cmake . ?...在build文件夹中进行编译 过程: 进入build文件夹 cmake .. make 注意是 cmake .. 中间文件在build文件下 ? 可执行文件所在目录 ?
内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除,如程序中的example ADD_SUBDIRECTORY(src bin) 将 src...子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录 如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录 更改二进制的保存路径 SET...目录名以/结尾:将这个目录中的内容安装到目标路径。...使用外部共享库和头文件 准备工作,新建一个目录来使用外部共享库和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt
CMake意为cross-platform make,可用于管理c/c++工程。.../lib/libCd.so 使用下面的CMakeLists.txt文件,目标是编译当前目录和./other目录下的所有源文件,并链接./lib目录下的相应库文件到最终的可执行文件....MinSizeRel CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL 在CMakeLists.txt中可以自定义编译选项变量 set(CMAKE_CXX_FLAGS_RELEASE.../hello,然后将当前目录的a.txt拷贝到新建的./hello目录里。 add_custom_command( OUTPUT ..../hello/a.txt) 自定义目标还可以使用add_dependencies命令加入到其他目标的依赖列表里,当执行make demo时,whatever目标会被自动调用。
一、源码使用 1、工程预览 使用 tree 命令查看文件树形结构 example 目录下的文件为待添加 Makefile 的源码,Makefile_and_readme 目录下文件为通用 Makefile..."subdir/"中的斜杠"/"不可省略 2. 顶层 Makefile 中的 CFLAGS 在编译任意一个 .c 文件时都会使用 3....四、怎么使用这套 Makefile: 1.把顶层 Makefile, Makefile.build 放入程序的顶层目录 在各自子目录创建一个空白的 Makefile 2.确定编译哪些源文件...: 每一个目录下面都有一个名为 Makefile 的文件,在 Makefile 里面指定了哪些文件,哪些目录要编译进程序里,我们使用顶层 Makefile.build 将这些文件编进程序里。...进入子目录编译: $(subdir-y): make -C $@ -f $(TOPDIR)/Makefile.build # 进入子目录并使用顶层目录里面的 Makefile.build 来编译这个子目录
外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录,CMakeLists.txt和上面例子一致 [root@localhost...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是将写的目录从编译中排除,如程序中的example ADD_SUBDIRECTORY(src bin) 将 src...子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录 如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录 更改二进制的保存路径 SET.../结尾:将这个目录中的内容安装到目标路径 安装过程 cmake .. make make install 静态库和动态库的构建 任务: 1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用...使用外部共享库和头文件 准备工作,新建一个目录来使用外部共享库和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt
1.2 编译设备树 这里我们选用的编译设备树的方法是和内核一起编译,内核中的设备树都在内核源码/arch/arm/boot/dts/ 目录中,我们使用的开发板对应的设备树为imx6ull-seeed-npi.dtb...1.3 加载设备树 将编译好的设备树文件拷贝到开发板中,可以使用SCP或者NFS,替换/boot/dtbs/4.19.71-imx-r1/imx6ull-seeed-npi.dtb。...设备树插件也可以使用DTC工具编译,不过,比较繁琐,容易出错。在虚拟机中,从gitee克隆下野火提供的一键式编译工具。...2.2 内核dtc工具编译设备树插件 编译设备树插件和编译设备树类似,这里使用内核中的dtc工具编译编译设备树插件。将xxx.dts 编译为 xxx.dtbo。...将dtbo的内容cat到dtbo属性文件。
在petalinux工程目录下,使用命令“petalinux-create -t modules --name --enable”,能创建Linux内核模块,包括c源代码文件、Makefile、Yocto...编译的命令是“(MAKE) -C (KERNEL_SRC) M= Linux内核顶层Makefile关于M变量的代码: # Use make M=dir or set the environment variable...如果加上对KERNELRELEASE的检查,前面的Makefile可以改造成既可以在在内核源码目录内编译,也可以在在内核源码目录外编译。...rm -rf .tmp_versions Modules.symvers endif 实际测试中,不加KERNELRELEASE相关语句,也不影响在Linux内核源码目录内编译。...如果既不在PetaLinux环境里编译,也不再Linux内核源码目录内编译,请再在上面的Makefile文件里定义内核源码目录。
从最简单的CMAKE示例开始 为了打印文件结构,我们要先装一个tree来做准备。.../bin/main [100%] Built target main 在make(有百分比阶段)完成后,会发现编译完的o文件,被link(链接)完成,最后输出可执行的文件到bin目录,我们进入bin目录运行...update tzloop@tzloop-GE62-6QC:sudo apt-get install clang Error2: 依赖的头文件找不到 分析下Cmake文件,这里主要有三个模块需要引入到源文件中...ANN模块同理,下载源文件tar.gz,在这里下载 ,然后注意编译的方式,使用linux-g++ tzloop@tzloop-GE62-6QC:~/Desktop/ann-1.1.2+doc$ make...拷贝libglui.a和glui.h到usr相应目录,之后再运行仍然又重复undeclared错误。
dependency tree 在上面的图示中,“.c” 结尾的文件是事先写好的源文件,而不是由命令生成的文件,所以它们没有先决条件。...更多实际目标,可以作为必要条件加入到默认目标中。这个 Makefile 的使用者也可以使用 make all 来构建整个项目。 另一个常见的伪目标是 clean,它会移除所有 make 创建的文件。...$ make CC=clang CFLAGS='-O3 -march=native' 如果用户不想在每次调用时指定这些宏,他们可以(小心)使用 make 的 -e 标志从环境中覆盖宏定义。...第二个 .SUFFIXES 将 .c 和 .o 加到现在是空的后缀列表中。...创建的文件 install 安装已编译好的程序,主要任务是完成目标执行文件的拷贝 print 列出改变过的源文件 tar 打包备份源程序,形成tar文件 dist 创建压缩文件,一般将tar文件压缩成Z
a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库) 动态库文件必须以lib开头,以.so结尾lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool...对比编译前后的speexdsp原生库结构tree工具能以树形的方式显示指定目录的层级结构。非绿色字体是编译后生成的文件。...分析原生库下make.am文件make.am是一种比Makefile文件抽象程序更高的编译规则文件。 在里面可以指定生成目录,编译用的源码,编译的时候依赖哪些库,要安装到什么目录。...在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。文件指示。...过程log以下是执行make命令后在终端显示的部分log,通过分析也可以知道编译so库需要的.c文件均位于libspeexdsp目录。
3 构建文件 一般来说,Ant 的构建文件默认为 build.xml,放在项目顶层目录中。然而,并没有限制构建文件必须命名为 bulid.xml,也并不限制放在项目顶层目录中。...在这一章节中,我们将会构建一个项目。这一章节的目的是创建一个 Ant build 文件,该文件能够编译 Java 源文件和将这些类文件存储在 WEB-INF\classes 文件夹下。...在上面的例子中: src.dir 表示这个项目的源文件目录,也就是存储 java 文件的地方。...我们对 javac 任务提供源文件夹和类路径,并且通过执行 javac 任务将类文件存放在构建文件夹中。...,将存储在 build.dir 文件夹中。
.): 1、多个源文件,使用命令 aux_source_directory(dir var): 在上一篇文章最后结尾的时候,有一个问题,就是在同一目录下面,有多个源文件的时候,这个时候你不能都往下面第三条命令里面一直手动添加源文件...test root@txp-virtual-machine:/home/txp/test# make [100%] Built target main 2、在上面的例子中,我们会发现同一目录下源文件比较乱...,所以在cmake里面有这样的规则,可以把相同类型以及相关的源文件放到同一个目录,比如说,现在我在test目录下创建test1和test2两个目录文件,并同时把test1.c、test1.h、test2...test1.c test2.c CMakeCache.txt CMakeLists.txt Makefile test1.h test2.h 然后把相关文件一到这两个目录文件下去...其实在实际开发工程中,一般会把源文件放到src目录下,把头文件放入到include文件下,生成的对象文件放入到build目录下,最终输出的elf文件会放到bin目录下,这样让人看起来一目了然,哈哈,更多详细情况可以看下期分解
我都可以写成文章出来分享给大家)熟悉我的网友都知道,我也是小白,会从很基础的东西开始分享开始,虽然都是比较理论化的东西,但是都是点滴的积累(有的时候,其实你真正在有些项目开发过程中,学到的东西不是很多,...SRC_LIST):把当前目录的源文件:main.c test1.c test2.c都放到变量SRC_LIST里面去。 include_directories (.....和make命令后,生成的一些配置文件都会在这个目录下,不会在别的目录下,就这样看起来就舒服整洁多了: root@txp-virtual-machine:/home/txp/testmy/build# ls...@txp-virtual-machine:/home/txp/testcmake# ls build lib lib_test 然后在lib_test目录下放我们的源文件test1.c test1....从lib目录下我们可以看到生成了生成了静态库和动态库:libtest1.a libtest1.so 2、对库进行链接: 现在我们使用刚才生成的库了。
一般使用过程如下: $ mkdir build $ cd build/ $ cmake .. $ make * 为了不让编译产生的中间文件污染项目的文件结构,专门创建build文件夹进行编译构建。...因此在完成同样的编译任务时,CMake比Make的用法更容易,且屏蔽了Makefile中的很多复杂的语法点。...使用样例: link_directories(${SOURCE_DIR}/lib) ---- (9) aux_source_directory 含义:查找指定目录中的所有源文件,将结果存进指定变量名 语法...使用样例: add_compile_options(-std=c++11) ---- (12) add_subdirectory 含义:将子目录添加到构建范围 语法: add_subdirectory(...使用样例: add_dependencies(log com_log) ---- (15) add_library 含义:添加一个库到工程中,指定这个库的源文件 语法: add_library(<name
: div.c gcc -c div.c # 伪目标,删除所有.o文件 clean: rm *.o cd到当前目录,执行输入make命令,即可快速编译生成main.exe程序,当我们需要清理整个工程时...将生成的可执行程序拷贝到应用安装目录下。...在Linux平台下,通常是将C语言的源代码和Makefile脚本一同发布出去,用户只需要在源码目录下分别执行命令make、make install即完成了程序的编译和安装,可以看到,有了make工具后,...cmake -G "MinGW Makefiles" 要注意,以上命令直接在CMD命令行执行可能会报错,它需要一个sh环境,这里有两种解决办法 将sh.exe所在目录加入到环境变量中,它位于MinGW...目录中,包括Makefile,然后执行make编译。
指定项目的名称 指定需要的 CMake 的最低版本 将 dir 目录下的所有源文件的名字保存在变量中 指定从一组源文件编译出一个可执行文件且命名 指定从一组源文件 source1 source2 …...---- 编译与源代码分离 编译产生的中间过程文件全都放到 build目录下面,包括make生成的文件。....patch[.tweak]]] [FATAL_ERROR]) 使用范例:cmake_minimum_required(VERSION 2.8) ---- 将 dir 目录下的所有源文件的名字保存在变量中...如果指定了 CACHE 变量将被从 Cache 中移除。...CMAKE_BINARY_DIR 内容为 binary tree 根目录的完整路径,在 in-source build 的时候值与 CMAKE_SOURCE_DIR 相同。
示例代码 首先看一下测试代码的全貌: mylib:只有一个源文件,编译输出一个动态库; myapp:也只有一个源文件,链接 mylib 动态库,编译输出一个可执行程序; mylib 在mylib目录中.../lib) 这个两个目录暂时还不存在,待会编译的时候我们再手动创建。 可以让 mylib 在编译时的输出文件,自动拷贝到指定的目录。...我们可以分别进入mylib和myapp目录,执行make指令来单独编译,也可以直接在build目录下编译所有的目标。...由于我们是在build目录下编译的,编译过程中所有的输出和中间文件,都放在build目录下,一点都没有污染源文件。...Windows 下构建过程 把Linux系统中的build文件夹删除,然后把测试代码压缩,复制到Windows系统中继续测试。
编译安装MiniGui 安装资源文件 解压资源文件,进入minigui-res-be-3.0.12目录 $ ....etc目录下生产了minigui所需的配置文件MiniGUI.cfg,将该文件拷贝到/etc目录下,并修改部分配置信息。...engine #ial_engine=pc_xvfb ial_engine=qvfb mdev=/dev/input/mice mtype=IMPS2 1 2 3 4 5 6 7 8 9 10 11 将默认配置修改为使用...$ tree ├── helloworld │ ├── helloworld.c │ ├── helloworld_res_cn.h │ ├── helloworld_res_en.h...16 17 18 19 20 21 22 将MiniGui的sample中src目录的helloworld相关的文件拷贝到helloword目录下 $ ls helloworld* helloworld.c
领取专属 10元无门槛券
手把手带您无忧上云