file-type

Makefile中Eval函数的使用示例教程

ZIP文件

下载需积分: 14 | 3KB | 更新于2025-01-03 | 117 浏览量 | 0 下载量 举报 收藏
download 立即下载
Makefile是UNIX和Linux系统中用来控制源代码编译过程的文件,它定义了编译过程中要执行的命令。Makefile使用make工具来执行,make是一个功能强大的命令行工具,它根据Makefile文件中的规则来构建和管理软件项目。在Makefile中,eval函数是一个较为高级的特性,它可以用于动态地生成规则、变量和目标等。 通常,eval函数的使用场景包括但不限于: 1. 动态地创建或修改变量。 2. 动态地生成或修改目标和依赖关系。 3. 构建复杂的构建逻辑,其中某些规则或变量值直到构建过程开始时才能确定。 对于eval函数的使用,以下是一些具体的知识点说明: 1. eval函数的基本语法: 在Makefile中,eval函数接受一个字符串作为参数,然后将这个字符串当作Makefile的一段内容来执行。其格式如下: ```makefile $(eval $(<parameters>)) ``` 其中`<parameters>`是包含在括号中的Makefile代码片段。 2. 使用eval动态创建变量: 当在Makefile执行过程中需要根据某些条件动态创建变量时,可以使用eval函数。例如,可以根据一个包含变量名和值列表的变量动态生成多个变量定义: ```makefile variables = VAR1=value1 VAR2=value2 $(foreach var,$(variables),$(eval $(var))) ``` 在上面的例子中,`foreach`函数用于遍历`variables`变量中的每一项,然后`eval`用于将每一项展开为一个新的变量定义。 3. 使用eval动态生成规则: eval可以用来根据程序的输出或者某些参数动态生成Makefile中的规则。这对于生成条件编译规则或者针对不同的源文件列表创建编译规则特别有用。例如: ```makefile sources := $(shell ls *.c) $(foreach src,$(sources),$(eval $(src): $(src:.c=.o))) ``` 在这个例子中,shell函数列出了所有的`.c`文件,然后foreach和eval联合使用,为每个源文件生成了一个规则来编译对应的对象文件。 4. 使用eval解决复杂问题: 在某些复杂的构建场景下,可能需要根据运行时的数据来决定Makefile的结构。eval函数可以用来处理这些情况,允许Makefile在执行时生成临时的规则或变量,从而改变后续命令的执行逻辑。 5. 注意事项: - 使用eval需要非常小心,因为任何错误的代码片段都可能导致Makefile出现语法错误或者预期外的行为。 - eval生成的代码无法进行语法检查,因此在编写涉及eval的Makefile时需要格外仔细。 - eval的滥用可能导致Makefile难以理解和维护,因此建议只在没有其他替代方法时使用eval。 在实践中,eval的使用并不是非常普遍,因为合理设计Makefile通常可以避免需要使用eval的情况。然而,对于需要高度动态化构建过程的场景,eval是一个非常有用的工具。 鉴于给定的文件信息较为简单,没有提供具体的Makefile内容,以上知识点是从一般意义上对在Makefile中使用eval函数的说明。如需进一步的实例演示,需要具体的Makefile文件内容作为参考。

相关推荐

filetype

home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/numba/types/__init__.py:110: FutureWarning: In the future `np.long` will be defined as the corresponding NumPy scalar. long_ = _make_signed(np.long) Traceback (most recent call last): File "tools/train.py", line 24, in <module> from mmdet3d.datasets import build_dataset File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/datasets/__init__.py", line 4, in <module> from .custom_3d import Custom3DDataset File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/datasets/custom_3d.py", line 10, in <module> from ..core.bbox import get_box_type File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/core/__init__.py", line 4, in <module> from .evaluation import * # noqa: F401, F403 File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/core/evaluation/__init__.py", line 3, in <module> from .kitti_utils import kitti_eval, kitti_eval_coco_style File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/core/evaluation/kitti_utils/__init__.py", line 2, in <module> from .eval import kitti_eval, kitti_eval_coco_style File "/media/wangbaihui/1ecf654b-afad-4dab-af7b-e34b00dda87a/mmdetection3d/mmdet3d/core/evaluation/kitti_utils/eval.py", line 4, in <module> import numba File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/numba/__init__.py", line 15, in <module> from . import config, errors, _runtests as runtests, types File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/numba/types/__init__.py", line 110, in <module> long_ = _make_signed(np.long) File "/home/wangbaihui/.local/lib/python3.8/site-packages/numpy/__init__.py", line 320, in __getattr__ raise AttributeError("module {!r} has no attribute " AttributeError: module 'numpy' has no attribute 'long' ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 2520454) of binary: /home/wangbaihui/anaconda3/envs/vad/bin/python /home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py:367: UserWarning: ********************************************************************** CHILD PROCESS FAILED WITH NO ERROR_FILE ********************************************************************** CHILD PROCESS FAILED WITH NO ERROR_FILE Child process 2520454 (local_rank 0) FAILED (exitcode 1) Error msg: Process failed with exitcode 1 Without writing an error file to <N/A>. While this DOES NOT affect the correctness of your application, no trace information about the error will be available for inspection. Consider decorating your top level entrypoint function with torch.distributed.elastic.multiprocessing.errors.record. Example: from torch.distributed.elastic.multiprocessing.errors import record @record def trainer_main(args): # do train ********************************************************************** warnings.warn(_no_error_file_warning_msg(rank, failure)) Traceback (most recent call last): File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/run.py", line 702, in <module> main() File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py", line 361, in wrapper return f(*args, **kwargs) File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/run.py", line 698, in main run(args) File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/run.py", line 689, in run elastic_launch( File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 116, in __call__ return launch_agent(self._config, self._entrypoint, list(args)) File "/home/wangbaihui/anaconda3/envs/vad/lib/python3.8/site-packages/torch/distributed/launcher/api.py", line 244, in launch_agent raise ChildFailedError( torch.distributed.elastic.multiprocessing.errors.ChildFailedError: *************************************** tools/train.py FAILED ======================================= Root Cause: [0]: time: 2025-06-26_15:09:12 rank: 0 (local_rank: 0) exitcode: 1 (pid: 2520454) error_file: <N/A> msg: "Process failed with exitcode 1" ======================================= Other Failures: <NO_OTHER_FAILURES> ***************************************

brooknew
  • 粉丝: 144
上传资源 快速赚钱