从CMake调用时,M4会报错“没有那个文件或目录”

前端开发 2026-07-12

在我的项目根目录下,我有一个名为“frontend”的文件夹,其中包含带有m4宏的HTML文件,以及一个 tokens.m4 文件。

在这些HTML文件的顶部有一个include:

<!DOCTYPE html>
<html lang="en">
    <head>
<!--
    include(`tokens.m4')
-->

如果我像下面这样手动运行m4:

m4 _index.html >index.html

它可以找到 tokens.m4,并正确输出。

frontend/CMakeLists.txt 中,用这段代码运行 cmake --build

add_custom_target(frontend
  COMMAND m4 ${CMAKE_CURRENT_SOURCE_DIR}/_index.html >${CMAKE_BINARY_DIR}/index.html
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_index.html
)
frontend/_index.html at line 5: include(tokens.m4): No such file or directory

那么,如何让m4在 CMake中找到 tokens.m4 文件?

解决方案

解决方案,如 @Tsyvarev所贴所述,是将 WORKING_DIRECTORY 添加到 add_custom_target 中。

add_custom_target(frontend
  COMMAND m4 _index.html >${CMAKE_BINARY_DIR}/index.html
  DEPENDS _index.html
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章