首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可移植 Makefile 教程

在依赖树中,指定一条或多条边语法非常简单: target [target...]: [prerequisite...] 技术层面来讲,虽然多个目标可以通过一个单一规则指定,但是这种做法并不常见。...如果你打算创建示例中源文件,并调用 make, 你会发现它实际上已经知道了它该如何构建目标文件。...因为树不同分支可以被独立地进行更新,所以有很多并行化空间。很多 make 实现都支持通过 -j 选项进行并行构建。...$ make CC=clang CFLAGS='-O3 -march=native' 如果用户不想在每次调用时指定这些宏,他们可以(小心)使用 make -e 标志环境中覆盖宏定义。...他们 cl.exe 编译器使用 .obj 作为目标文件扩展名, .exe 作为二进制扩展名,这两个扩展名与 unix 系统都不同,所以它有一些不同内置推断规则。

1.3K10

CMake使用教程和原理

一、什么是CMake CMake是一个主要用于CPP构建工具。CMake语言是平台无关中间编译工具。同一个CMake编译规则在不同系统平台构建不同可执行构建文件。...CMake旨在解决各平台不同Make工具产生差异(比如GNU Make, QTqmake,微软nmake, BSDpmake)。...CMake是具有管理依赖项,依赖之间关系。如果变更了源文件,必须重新构建所有依赖该源文件脚本。 并且要求高效依赖关系解析是耗时短。...当这些文件有变化,都会cmake重新构建。 image.png depend.make和DependInfo.make:所有object依赖关系。...因为涉及到不同平台下C++程序后缀名不一样,在Windows下我们常用就是一个.cpp扩展名,还有gcc一般用c.cc.cxx 等等都是C++文件扩展名

12.6K296
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    xmake v2.3.2 发布, 带来和ninja一样快构建速度

    这个版本重点重构优化了下内部并行构建机制,实现多个target源文件并行编译,以及并行link支持,同时优化了xmake一些内部损耗,修复影响编译速度一些bug。...通过测试对比,目前整体构建速度基本跟ninja持平,相比cmake/make, meson/ninja都快了不少,因为它们还额外多了一步生成makefile/build.ninja过程。...项目源码 官方文档 一些优化点 多个target间所有源文件同时并行构建(之前不能跨target,中途会被link给堵住串行化) 多个无依赖targetlink可以并行执行(之前只能挨个执行link...) 修复之前任务调度bug,更加细粒度化调度,充分利用cpu core资源 优化xmake内部api上一些损耗,这块效果也很明显 更多优化细节可以看下:issue #589 构建速度对比 我们在termux...和macOS上做了一些对比测试,测试工程在: xmake-core 对于相对比较多target项目,新版xmake对其构建速度提升更加明显。

    84510

    翻译qmake文档(四) Building Common Project Types

    可以在.pro文件里使用这些变量指定应用程序相关信息。 HEADERS -应用程序头文件列表。 SOURCES -应用程序c++源文件列表。...FORMS - 应用程序UI文件列表(用Qt Designer创建) LEXSOURCES -应用程序Lex 源文件列表 YACCSOURCES - 应用程序Yacc 源文件列表 TARGET ...(debug, debug|release) { TARGET = debug_binary } else { TARGET = release_binary } 上面的代码片段作用域修改在每个模式下构建目标用来确保结果目标拥有不同名字...可以使用默认规则处理 make 在两种模式下安装 build_all选项确保在安装规则被调用时将安装指向两个目标版本: make install 也可以根据目标平台自定义构建目标的名字。...例如,一个库或插件可以在windows和Unix平台使用不同命名习惯。

    936100

    如何使用Makefile在Ubuntu上自动执行重复任务

    介绍 如果您有Linux服务器上源代码安装软件经验,您可能会遇到make实用程序。该工具主要用于自动编译和构建程序。它允许应用程序作者轻松地布置构建该特定项目所需步骤。...手册页中,我们可以看到make将查找名为GNUmakefile文件,然后查找makefile,然后查找Makefile。...您可以根据需要添加任意数量缩进行和命令。Make会一次一个地浏览它们。 在命令告诉make不同方式处理它们之前,我们可以放置一些东西: -:命令前破折号告诉make如果遇到错误则不中止。...这基本上采取以下形式: original_extension.target_extension: 这不是一个实际目标,但它将匹配任何具有第二个扩展名文件调用,并在第一个扩展名中将它们构建出文件。...make 正如您所看到,很容易将任务串联在一起,并且可以选择一个流程到某一点。例如,如果您只想转换文件并需要在不同服务器上托管它们,则可以使用webify目标。

    2.4K00

    CMake学习笔记合集

    内部构建和外部构建 上述例子就是内部构建,他生产临时文件特别多,不方便清理 外部构建,就会把生成临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...当然..表示上一级目录,你可以写CMakeLists.txt所在绝对路径,生产文件都在build目录下了 在build目录下,运行make构建工程 注意外部构建两个变量 HELLO_SOURCE_DIR...,所以应该在src下CMakeLists.txt下写 安装 一种是代码编译后直接 make install 安装 一种是打包时指定 目录安装。...简单可以这样指定目录:make install DESTDIR=/tmp/test 稍微复杂一点可以这样指定目录:....静态库和动态库区别 静态库扩展名一般为“.a”或“.lib”;动态库扩展名一般为“.so”或“.dll”。

    2.2K20

    CMake学习笔记

    最关键是,它自动生成了Makefile. 4、使用make命令编译 root@localhost cmake]# make Scanning dependencies of target hello...当然..表示上一级目录,你可以写CMakeLists.txt所在绝对路径,生产文件都在build目录下了 3、在build目录下,运行make构建工程 注意外部构建两个变量 1、HELLO_SOURCE_DIR...,所以应该在src下CMakeLists.txt下写 安装 一种是代码编译后直接 make install 安装 一种是打包时指定 目录安装。...简单可以这样指定目录:make install DESTDIR=/tmp/test 稍微复杂一点可以这样指定目录:....静态库和动态库区别 静态库扩展名一般为“.a”或“.lib”;动态库扩展名一般为“.so”或“.dll”。

    2.1K20

    Android.mk语法解析

    这是必需,因为所有的构建控制文件在一个gnu make执行上下文中解析,其中所有变量都是全局。...LOCAL_SRC_FILES LOCAL_SRC_FILES := hello-jni.c LOCAL_SRC_FILES变量必须包含C和/或C++源文件列表,这些文件将被构建并组装到模块中。...注意你应该这里不列出头文件和包含文件,因为构建系统将自动为您计算依赖项;只列出源文件这将直接传递给编译器。 注意,C++源文件默认扩展名是“.CPP”。...但是,可以通过定义变量LOCAL_CPP_EXTENSION来指定不同变量本地扩展名。不要忘记初始点(即“.cxx”有效,而不是“cxx”)。...TARGET_ARCH 目标CPU架构名 TARGET_PLATFORM 目标平台名字 TARGET_ARCH_ABI LOCAL_C_INCLUDES LOCAL_C_INCLUDES :=

    1.8K00

    qmake手册(Qt5.9.3)

    项目文件可以包含许多不同元素,包括注释,变量声明,内置函数和一些简单控制结构。在大多数简单项目中,只需要使用一些基本配置选项来声明用于构建项目的源文件和头文件。...通常,您使用一系列声明来指定项目中资源,但支持简单编程结构使您能够为不同平台和环境描述不同构建过程。 项目文件元素 qmake使用项目文件格式可以用来支持简单和相当复杂构建系统。...简单项目文件使用简单声明式样式,定义标准变量以指示项目中使用源文件和头文件。复杂项目可能使用控制流结构来微调构建过程。 以下各节介绍项目文件中使用不同类型元素。...这意味着可以SUBDIRS项目中发出make check命令来运行整个测试套件。 检查目标的执行可能由某些Makefile变量定制。...在这种情况下,您可以明确地调用全部目标来同时构建两个配置: make all 注意:生成Visual Studio和Xcode项目时细节略有不同

    5.7K20

    程序员C语言快速上手——工程篇(十三)

    bat脚本,创建一个名为build文件(文件名任意),修改其扩展名为build.bat,使用文本编辑器编辑该文件(Linux平台上,则保存扩展名build.sh) gcc add.c sub.c mul.c...而make 工具会自动根据修改情况完成源文件对应.o文件更新、库文件更新以及最终可执行程序更新,它实际上是通过比较对应文件最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。...在Linux平台下,通常是将C语言源代码和Makefile脚本一同发布出去,用户只需要在源码目录下分别执行命令makemake install即完成了程序编译和安装,可以看到,有了make工具后,...Ninja,实际上CMake2.8.9版本开始可以支持Ninja构建 Ninja 是一个注重速度小型构建系统。...它与其他构建系统在两个主要方面不同:它被设计为使其输入文件由更高级别的构建系统生成,并且被设计为尽可能快地运行构建

    3.1K30

    【Linux】《how linux work》第十五章 开发工具

    虽然你可以手动编译多个源文件,就像上面的例子所示,但是当源文件数量增多时,在编译过程中跟踪所有这些文件可能会很困难。 在第15.2节中描述make系统是管理编译传统Unix标准。...为了构建一个目标,make遵循一个规则,比如从一个.c源文件到一个.o目标文件规则。 make已经知道了几个规则,但你可以自定义这些现有规则并创建自己规则。...The first target is always the default, the target that make wants to build when you run make by itself...of Makefile or makefile -n 打印出构建所需命令,但不实际运行任何命令 -f file 告诉makefile中读取,而不是Makefile或makefile中读取 15.2.6...现在你已经了解了系统上编程工具基础知识,接下来可以看看它们能做什么了。下一章将详细介绍如何在Linux上源代码构建软件包。

    10510

    Android自动打包工具aapt详解

    我们可以查 看,创建, 更新ZIP格式文档附件(zip, jar, apk)。...aapt打包流程 aapt传统打包主要是最res和java代码打包,aapt打包走是单线程、流水式任务从上到下进行打包构建。 ?...传统aapt打包,aapt会执行2次,第一次是生成R.java,参与javac编译,第二次是对res里面的资源文件进行编译,最后APKBuilder会把DEX文件与编译好源文件及DEX文件进行打包成...整个流程下来,没有任何缓存,没有并发,也没有增量,每次构建都是一个全新过程,所以每次构建时间也比较恒定,代码量,资源量越多,构建时间越慢。...aapt常用参数 我们可以通过aapt help来查看常用参数。 Usage: aapt l[ist] [-v] [-a] file.

    3.9K81

    如何发布一个 TypeScript 编写 npm 包

    项目我们库称为digx。它允许嵌套对象中根据路径找出值,类似于lodash中get函数。...npm包可以在这里找到。GitHub仓库地址在这里。初始化项目让我们创建空目录并初始化它开始。...打开package.json,更新scripts内容:"scripts": { "build": "tsc"}现在我们可以用npm run build来运行构建...这样会失败,因为我们还没有任何可以构建代码...我不觉得要发布任何配置文件,也不觉得要发布源文件和测试文件。我们可以一件事是使用.npmignore,列出所有我们不想发布文件。...运行以下命令:npm publish --dry-run并确保只包括所需文件。当一切准备就绪时,就可以运行:npm publish测试一下让我们创建一个全新项目并安装我们模块。

    1.4K20

    一天一个 Linux 命令(18):ln 命令

    当需要在不同目录,用到相同文件时,不需要在每一个需要目录下都放一个必须相同文件,只要在某个固定目录,放上该文件,然后在 其它目录下用ln命令链接(link)它就可以,不必重复占用磁盘空间。...When creating hard links, each TARGET must exist....Otherwise, the last option specified controls behavior when a TARGET is a symbolic link, defaulting to...硬链接是存在同一个文件系统中,而软链接却可以跨越不同文件系统。 五、软链接和硬链接区别 1.软链接 (1).软链接,以路径形式存在。...类似于Windows操作系统中快捷方式 (2).软链接可以跨文件系统 ,硬链接不可以 (3).软链接可以对一个不存在文件名进行链接 (4).软链接可以对目录进行链接 2.硬链接 (1).硬链接,以文件副本形式存在

    56430

    CMake 秘籍(八)

    ,我们将结合前面章节中讨论多个不同构建块,并将其应用于一个实际项目。...由于我们还没有定义任何目标,我们可以将选项保存在一个中心文件开始,但稍后我们可能会将选项定义移到更接近目标的位置,以限制范围并得到更可重用 CMake 构建块。...可执行文件和非常少目标开始,稍后限制范围 让我们添加一些源文件。...对于 Vim 示例,我们可以 src/Makefile 和 src/configure.ac 中获得关于源文件分组更多见解。从这些文件中,我们可以推断出大多数源文件是基本和必需。...我们不喜欢这种方法,在我们示例 CMake 移植中将采取不同做法:这些文件将在构建目录中生成。

    18910

    【C++】基础:代码编译与构建工具介绍

    常用构建工具包括: Make:GNU 构建工具,使用 Makefile 文件描述构建规则。 CMake:跨平台构建工具,使用 CMakeLists.txt 文件描述构建规则。...makefile相当于用户将要执行一系列命令,make根据makefile中命令对相应源文件进行编译和链接。...如果要自己编译很多源文件时候就需要cmake工具,可以更加方便地生成makefile文件给make用。cmake还可以跨平台生成对应平台可用makefile,无需自己根据每个平台不同特性修改。...CMake可以生成Makefile或Visual Studio项目文件等,使开发人员可以不同平台和编译器上使用相同配置文件进行构建。...这里 target 必须已经被创建, 链接item 可以是已经存在 target(依赖关系会自动添加):target_link_libraries(Main Lib) 常用变量: PROJECT_SOURCE_DIR

    20010

    python包合集-shutil

    fsrc:源文件 path:目标地址 四、copyfileobj()   1、描述:以文件对象形式,将一个文件内容拷贝到另一个文件中,如果目标文件本身就有内容,来源文件内容会把目标文件内容覆盖掉...3、工程示例      该项目中创建一个test1,文件夹里面创建,e.doc, f.xls, g.txt 等不同后缀文件用做测试   4、代码演示 shutil.copytree('/Users/...()   1、描述:压缩打包   2、语法:make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run...=0, owner=None, group=None, logger=None) base_name: 压缩包文件名,也可以是压缩包路径。...文件夹可以不存在,会自动生成 format:解压格式,默认为None,会根据扩展名自动选择解压格式   3、代码示例 shutil.unpack_archive(filename='/Users/houlei

    35530
    领券