gpt4 book ai didi

c++ - CMake:什么是可能的目标源类型,它们可以扩展吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:23 25 4
gpt4 key购买 nike

在 CMake 中,可以使用 add_library 定义目标,例如 C 或 C++ 库, 语法如下:

add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])

但是可能的来源有哪些?它们显然可以是包含代码的.h.cxx 文件。但它们也可以是 .rc 资源文件,甚至是链接器使用的 .obj 目标文件。

那么,根据语言、目标类型和平台,哪些类型的“非代码”被允许作为 CMake 目标的源? SOURCES上的页面信息量不大。它位于文档的其他地方吗?

此外,是否可以自定义和扩展此允许的源类型列表,以及如何自定义和扩展?

编辑

例如,作为目标源提供的对象在 tensorflow 的 CMake 文件中随处使用,for example here .

最佳答案

支持的扩展集主要取决于 ENABLED_LANGUAGES .

所以如果我用 grep 查找 CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS 我将得到以下列表:

set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS "s;S;asm")
set(CMAKE_C_SOURCE_FILE_EXTENSIONS "c;m")
set(CMAKE_CSharp_SOURCE_FILE_EXTENSIONS "cs")
set(CMAKE_CUDA_SOURCE_FILE_EXTENSIONS "cu")
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS "C;M;c++;cc;cpp;cxx;mm;CPP")
set(CMAKE_Fortran_SOURCE_FILE_EXTENSIONS "f;F;fpp;FPP;f77;F77;f90;F90;for;For;FOR;f95;F95")
set(CMAKE_Java_SOURCE_FILE_EXTENSIONS "java")
set(CMAKE_RC_SOURCE_FILE_EXTENSIONS "rc;RC")
set(CMAKE_Swift_SOURCE_FILE_EXTENSIONS "swift")

特殊情况

有一些特殊情况 generator expressions喜欢 add_library(... $<TARGET_OBJECTS:objlib> ...) add_custom_command() 的输出电话。

编辑:使用目标文件作为源文件其实是a sub-case of the add_custom_command() special case cmSourceFile::CheckExtension() 中实现:

 // Look for object files.
if (this->Extension == "obj" || this->Extension == "o" ||
this->Extension == "lo") {
this->SetProperty("EXTERNAL_OBJECT", "1");
}

如何扩展支持的源文件扩展名/类型?

例子可以在这里找到

关于c++ - CMake:什么是可能的目标源类型,它们可以扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51310322/

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