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

用GNU make的$(foreach)遍历一个空项目

GNU make是一个常用的构建工具,可以用于自动化构建和管理项目。其中的$(foreach)函数可以用来遍历一个列表,并对列表中的每个元素执行相应的操作。

在遍历一个空项目时,$(foreach)函数可以用来执行一些初始化操作或者生成一些默认的文件或目录结构。以下是一个示例:

代码语言:makefile
复制
# 定义一个空项目的文件列表
FILES := main.c utils.c config.h

# 定义一个目标,用于遍历文件列表并执行操作
.PHONY: init
init:
    $(foreach file,$(FILES),$(shell touch $(file)))

# 定义一个目标,用于清理生成的文件
.PHONY: clean
clean:
    $(foreach file,$(FILES),$(shell rm -f $(file)))

在上面的示例中,我们定义了一个空项目的文件列表FILES,包含了main.cutils.cconfig.h三个文件。然后,我们定义了一个名为init的目标,使用$(foreach)函数遍历文件列表,并通过touch命令生成对应的文件。最后,我们定义了一个名为clean的目标,使用$(foreach)函数遍历文件列表,并通过rm命令删除对应的文件。

使用GNU make执行make init命令时,会生成main.cutils.cconfig.h三个文件。执行make clean命令时,会删除这三个文件。

这种遍历空项目的方式可以用于项目的初始化或者一些默认文件的生成。在实际应用中,可以根据具体需求进行相应的操作,比如创建目录、生成配置文件等。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Makefile经典教程(掌握这些足够)

    makefile很重要       什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

    02

    AWStats简介

    安装 [url]http://sourceforge.net/projects/awstats/[/url] 下载安装包后: GNU/Linux:tar zxf awstats-version.tgz awstats的脚本和静态文件缺省都在wwwroot目录下:将cgi-bin目录下的文件都部署到 cgi-bin/目录下:/home/apache/cgi-bin/awstats/ mv awstats-version/wwwroot/cgi-bin /path/to/apache/cgi-bin/awstats 把图标等文件目录复制到WEB的HTML文件发布目录下,例如:/home/apache/htdocs/ 下发布 更多的批量更新脚本等在tools 目录下,可以一并放到cgi-bin/awstats/ 目录下 升级国内主要 搜索引擎和蜘蛛定义,安装GeoIP的应用库:C [url]http://www.maxmind.com/download/geoip/api/c/[/url] 解包,编译安装 perl -MCPAN -e ‘install “Geo::IP”‘ 或者使用纯Perl包 perl -MCPAN -e ‘install “Geo::IP::PurePerl”‘ 下载GeoIP/GeoIPCityLite包:解包并部署到awstats目录下:

    03

    linux下源码安装

    源码安装:配置(configure)、编译(make)、安装(make install),所有操作中间错误可以忽略,最后段末尾统一报错。 ####1.配置  configure:生成Makefile的shell脚本  文件结构如下:   <文件夹>     |-configure.in     |-Makefile.am     |-acconfig.h     |-<源码文件>       |-tt.c       |-qq.c       |-qq.h       |-Makefile.am  其中configure.in作为./configure的配置输入;makefile.am通过automake生成makefile.in再由./configure生成makefile;acconfig.h由autoheader生成config.h.in再由./configure生成config.h  configure.h使用autoconf和automake命令的shell脚本,可以通过autoscan自动生成或手写  acconfig.h包含了configure.in中未定义的宏 autoscan–>autoheader–>aclocal–>automake|autoconf

    04

    安装gcc及其依赖

    在gcc-4.8.2和gcc-4.1.2基础上编译gcc-5.2.0,有可能会遇到一些问题。 要想成功编译gcc,则在编译之前需要安装好它的至少以下三个依赖: gmp mpfr mpc 而mpc又依赖gmp和mpfr。 1) 安装gmp ./configure --prefix=/usr/local/gmp-6.0.0 make make install 2) 安装mpfr ./configure --prefix=/usr/local/mpfr-3.1.3 make make install 3) 安装mpc ./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.0.0 --with-mpfr=/usr/local/mpfr-3.1.3 make make install 为了成功的编译gcc,建议设置环境变量: export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.0.0/lib:/usr/local/mpfr-3.1.3/lib:$LD_LIBRARY_PATH 4) 安装gcc-5.2.0 ./configure --prefix=/data/gcc-5.2.0 --with-mpfr=/usr/local/mpfr-3.1.3 --with-gmp=/usr/local/gmp-6.0.0 --with-mpc=/usr/local/mpc-1.0.3 make make install 4) 安装gcc-4.8.2 ./configure --prefix=/data/gcc-4.8.2 --with-mpfr=/usr/local/mpfr-3.1.3 --with-gmp=/usr/local/gmp-6.0.0 --with-mpc=/usr/local/mpc-1.0.3 make make install 常见错误: 错误1) configure: error: C compiler cannot create executables 请尝试设置下LD_LIBRARY_PATH后,再执行configure,再make: export LD_LIBRARY_PATH=/usr/local/mpc-1.0.3/lib:/usr/local/gmp-6.0.0/lib:/usr/local/mpfr-3.1.3/lib:$LD_LIBRARY_PATH 错误2) ../.././libgcc/config/t-softfp:106: 在“else”指令之后含有不该出现的文字 ../.././libgcc/config/t-softfp:113: *** 每个条件只能有一个“else”。 停止。 首先通过find命令找到t-softfp(注意是config目录下的t-softfp): find . -name "t-softfp"  然后进入t-softfp的第106行: vi ./libgcc/config/t-softfp  98 ifeq ($(enable_shared),yes)  99     $(call softfp_set_symver,__$(*F)) 100     if grep strong_alias $(srcdir)/soft-fp/$@ > /dev/null; then \ 101       alias=`grep strong_alias $(srcdir)/soft-fp/$@ | sed -e 's/.*, *//' -e 's/).*//'`; \ 102       $(call softfp_set_symver,$$alias); \ 103     fi 104 endif 105     echo '#endif' >> $@ 106 else ifneq ($(softfp_wrap_start),) 107 softfp_file_list := $(addsuffix .c,$(softfp_func_list)) 108  109 $(softfp_file_list): 110     echo $(softfp_wrap_start) > $@ 111     echo '#include "soft-fp/$@"' >> $@ 112     echo $(softfp_wrap_end) >> $@ 113 else 114 softfp_file_list :=

    02

    CMake vs Make对比

    程序员现在已经使用了CMake和Make了很久。当您加入大公司或开始使用大型代码库开发项目时,您需要处理所有这些构建。你必须看到这些“CMakeLists.txt”文件浮动。你应该在终端上运行“cmake”和“make”命令。很多人只是盲目地按照指示,不是真的关心为什么我们需要以某种方式做事情。这个整个构建过程是什么,为什么它这样构造?CMake和Make之间有什么区别?有关系吗?可以互换吗? 事实证明,它们是完全不同的。了解他们之间的区别是非常重要的,以确保您不会陷入困境。在分析之前,先看看它们是什么。 make 我们设计软件系统的方式是我们首先编写代码,然后编译器编译并创建可执行文件。这些可执行文件是执行实际任务的可执行文件。“Make”是从程序的源文件中控制程序的可执行文件和其他非源文件的生成工具。 “Make”工具需要知道如何构建程序。它了解如何从名为“makefile”的文件构建程序。这个makefile列出了每个非源文件以及如何从其他文件中计算它。编写程序时,应该为其编写一个makefile,以便可以使用“Make”来构建和安装程序。简单的东西!如果您不明白,请再次阅读该段落,因为下一部分重要。 为什么我们需要“Make”? 我们需要“Make”的原因是因为它使最终用户能够构建和安装您的软件包,而无需了解其操作的详细信息。每个项目都有自己的规则和细微差别,每当你有一个新的合作者,它都会变得非常痛苦。这就是我们有这个makefile的原因。构建过程的细节实际上记录在您提供的makefile中。根据哪些源文件已更改,“自动”自动显示需要更新的文件。它还自动确定更新文件的正确顺序,以防一个非源文件依赖于另一个非源文件。 每当我们改变系统的一小部分时,重新编译整个程序将是低效的。因此,如果您更改了一些源文件,然后运行“Make”,它不会重新编译整个事情。它仅更新直接或间接依赖于您更改的源文件的那些非源文件。很整洁!“Make”不限于任何特定语言。对于程序中的每个非源文件,makefile指定了用于计算它的shell命令。这些shell命令可以运行一个编译器来产生一个对象文件,链接器生成一个可执行文件,以便更新一个库,Makeinfo格式化文档等。“Make”不仅限于构建一个包。您还可以使用“Make”来控制安装或卸载软件包,为其生成标签表, CMake的 CMake代表跨平台制作。CMake识别哪个编译器用于给定类型的源。如果您不知道,您不能使用相同的编译器来构建所有不同类型的源。您可以在每次建立项目时手动执行,但这将是乏味和痛苦的。CMake为每种类型的目标调用正确的命令序列。因此,没有明确指定像$(CC)这样的命令。 为了编码真正想要血液细节的垃圾,请继续阅读。如果你不是所有的,你可以跳到下一节。处理包含头文件,库等的所有常见的编译器/链接器标记都被平台独立的和构建系统无关的命令所取代。调试标志包括将变量CMAKE_BUILD_TYPE设置为“调试”,或者在调用程序时将其传递给CMake: cmake -DCMAKE_BUILD_TYPE:STRING =调试。 CMake还提供平台独立包含'-fPIC'标志(通过POSITION_INDEPENDENT_CODE属性)和许多其他。尽管如此,还可以通过CMake以及Makefile(通过使用COMPILE_FLAGS和类似属性)手动实现更为模糊的设置。当然,当第三方库(如OpenGL)以便携式的方式被包含时,CMake真的开始闪耀。 有什么不同? 如果您使用Makefile,即在命令行中键入“make”,则构建过程有一个步骤。对于CMake,有两个步骤:首先,您需要设置构建环境(通过在构建目录中键入cmake <source_dir>或运行某些GUI客户端)。根据您选择的构建系统(例如,在Windows上的Make on * nix,VC ++或MinGW等),这将创建一个makefile或相当的东西。构建系统可以作为参数传递给CMake。但是,CMake根据您的系统配置做出合理的默认选项。其次,您在选定的构建系统中执行实际构建。 我们将在这里跳入GNU构建系统领域。如果你不熟悉,这一段可能看起来像是jibber-jabber给你。好的,现在我给了法定的警告,我们继续吧!我们可以比较CMake和Autotools。当我们这样做时,我们可以看到Make的缺点,它们构成了Autotools创建的原因。我们还可以看到CMake对Make的明显优势。Autoconf解决了一个重要的问题,即可靠地发现系统特定的构建和运行时信息。但这只是便携式软件开发中的一小部分。为此,GNU项目开发了一套集成的实用工具来完成Autoconf开始的工作:GNU构建系统,其最重要的组件是Autoconf,Automake和Libtool。 “做”不能这样做,至少没

    03
    领券