Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让CMake不要对它不知道的来源保持沉默';我不明白?_Cmake - Fatal编程技术网

让CMake不要对它不知道的来源保持沉默';我不明白?

让CMake不要对它不知道的来源保持沉默';我不明白?,cmake,Cmake,CGube将愉快地生成C++代码,用于构建代码,其中代码 T.cpp < /C> >,但它将悄悄地将任何引用引用到 A.asm < /C>,因为它不知道该如何处理后缀。 有没有办法让CMake大声抱怨它不理解的源文件(以帮助将Makefile移植到CMake)。忽略未知的文件扩展名是出于设计考虑的(不幸的是,对于您的情况而言) 如果我查看任何未知内容的代码,最终会被分类为sourcekindetra(这样添加到生成的IDE文件中) 因此,我进行了一些测试,并提出了以下脚本,通过覆盖add\u e

CGube将愉快地生成C++代码,用于构建代码<静默< /代码>,其中代码<> T.cpp < /C> >,但它将悄悄地将任何引用引用到<代码> A.asm < /C>,因为它不知道该如何处理后缀。


有没有办法让CMake大声抱怨它不理解的源文件(以帮助将Makefile移植到CMake)。

忽略未知的文件扩展名是出于设计考虑的(不幸的是,对于您的情况而言)

如果我查看任何未知内容的代码,最终会被分类为
sourcekindetra
(这样添加到生成的IDE文件中)

因此,我进行了一些测试,并提出了以下脚本,通过覆盖
add\u executable()
本身来评估可执行目标源文件的有效文件扩展名:

cmake_最低要求(3.3版)
项目(静默CXX)
文件(写入T.cpp“int main(){return 0;}”)
文件(写入T.h“”)
文件(写入A.asm“”)
函数(添加\u可执行文件\u目标)
_添加可执行文件(${u目标}${ARGN})
获取\u属性(\u语言全局属性已启用\u语言)
foreach(列表中的语言)
列表(附加{u忽略“${CMAKE}{u lang}}{u忽略}”)
endforeach()
获取\u target\u属性(\u srcs${\u target}源)
foreach(列表中的src)
获取源文件属性(_lang“${u src}”语言)
获取\u文件名\u组件(\u ext“${\u src}”ext)
字符串(子字符串“${u ext}”1-1_ext)#删除前导点
如果(不在列表中且不在列表中)
消息(致命错误“Target${u Target}:未知源文件类型“${u src}”)
endif()
endforeach()
endfunction()
添加可执行文件(静默T.cpp T.h A.asm)

因为您希望CMake大声抱怨,所以我在本示例实现中将其声明为
致命错误。

CMake不只是将未知文件放入
add\u executable()

如果与

add_executable(silent T.cpp A.asm)
你有

add_custom_command(OUTPUT A.asm COMMAND <...>
    DEPENDS <dependees>)
add_custom_命令(输出A.asm命令
(视情况而定)
然后,每当
更改时,CMake都会在编译可执行文件之前重新运行create
A.asm
命令

请注意,自动标题扫描不提供此类功能:如果可执行文件包括
foo.h
,则只有当
foo.h
本身发生更改时,才会重新生成可执行文件。创建此标头的任何自定义命令都将被忽略



但是,您可以通过重新定义
add_executable
来更改其行为。有关此类重新定义的示例,请参见@Florian的答案。

Sweet。非常感谢。这是一条有用的信息。这是一个极好的答案。非常感谢!
add_custom_command(OUTPUT A.asm COMMAND <...>
    DEPENDS <dependees>)