首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CMake:可能的目标源类型有哪些,它们是否可以扩展?

CMake:可能的目标源类型有哪些,它们是否可以扩展?
EN

Stack Overflow用户
提问于 2018-07-13 00:14:59
回答 1查看 277关注 0票数 2

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

代码语言:javascript
复制
add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])

但是可能的来源是什么呢?它们可以是明显包含代码的.h.cxx文件。但它们也可以是链接器使用的.rc资源文件,甚至是.obj对象文件。

那么,根据语言、目标类型、平台的不同,CMake中允许哪些类型的“非代码”作为目标的源呢?SOURCES上的页面提供的信息很少。它是否位于文档中的其他位置?

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

编辑

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-14 05:34:52

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

因此,如果我为CMAKE__SOURCE_FILE_EXTENSIONS执行grep,我将得到以下列表:

代码语言:javascript
复制
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(... $ ...)add_custom_command()调用的输出。

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

//查找目标文件。if (this->Extension == "obj“|| this->Extension == "o”|| this->Extension == "lo") { this->SetProperty("EXTERNAL_OBJECT","1");}

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

示例可以在这里找到

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51310322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档