gpt4 book ai didi

cmake - 让 CMake 不要对它不理解的来源保持沉默?

转载 作者:行者123 更新时间:2023-12-01 12:20:14 24 4
gpt4 key购买 nike

Suppose you have a very simple CMakeLists.txt

add_executable(silent T.cpp A.asm)

CMake 会很高兴地生成用于构建的 C++ 目标 silent , 与 T.cpp在其中,但会默默地删除对 A.asm 的所有引用,因为它不知道如何处理后缀。

有什么方法可以让 CMake 大声提示它不理解的源文件(以帮助将 Makefile 移植到 CMake)。

最佳答案

忽略未知的文件扩展名是 - 不幸的是你的情况 - 设计。

如果我看 cmGeneratorTarget::ComputeKindedSources() 的代码任何未知的东西最终都会被归类为 SourceKindExtra (将被添加到生成的 IDE 文件中)。

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

cmake_minimum_required(VERSION 3.3)

project(silent CXX)

file(WRITE T.cpp "int main() { return 0; }")
file(WRITE T.h "")
file(WRITE A.asm "")

function(add_executable _target)
_add_executable(${_target} ${ARGN})

get_property(_langs GLOBAL PROPERTY ENABLED_LANGUAGES)
foreach(_lang IN LISTS _langs)
list(APPEND _ignore "${CMAKE_${_lang}_IGNORE_EXTENSIONS}")
endforeach()

get_target_property(_srcs ${_target} SOURCES)
foreach(_src IN LISTS _srcs)
get_source_file_property(_lang "${_src}" LANGUAGE)
get_filename_component(_ext "${_src}" EXT)
string(SUBSTRING "${_ext}" 1 -1 _ext) # remove leading dot
if (NOT _lang AND NOT _ext IN_LIST _ignore)
message(FATAL_ERROR "Target ${_target}: Unknown source file type '${_src}'")
endif()
endforeach()
endfunction()

add_executable(silent T.cpp T.h A.asm)

由于您想要 CMake 的相当大声的提示,我宣布它为 FATAL_ERROR在这个示例实现中。

关于cmake - 让 CMake 不要对它不理解的来源保持沉默?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44930408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com