使用不同的语言两次编译同一个文件的惯用方法是什么?



我有一个源文件,它在(至少)两种语言中有效。比如,C和c++或者C和CUDA。

我想用两种语言编译这个文件,每次编译成不同的库。在最近的CMake版本中,做这件事的惯用方法是什么?

指出:

  • 如果CMake的特定版本很重要,请指定我需要的最小版本。
  • 相关:我如何配置cmake编译一个文件两次与两个不同的编译器?

这篇文章详细阐述了@KamilCuk在OP评论中的建议,在我注意到评论之前写的。

LANGUAGE属性是在源文件本身上设置的,这是您的问题的核心。此属性的文档描述了它在设置它的目录范围内是可见的。这意味着拥有不同语言的一种方法是在两个不同的目录中设置属性。例如:

src/
CMakeLists.txt
common/
main.c
app1/
CMakeLists.txt
app2/
CMakeLists.txt

src/CMakeLists.txt:

add_subdirectory(app1)
add_subdirectory(app2)

app1/CMakeLists.txt:

set_property(SOURCE ../common/main.c PROPERTY LANGUAGE CXX)
add_executable(app1 ../common/main.c)

app2/CMakeLists.txt:

set_property(SOURCE ../common/main.c PROPERTY LANGUAGE C)
add_executable(app2 ../common/main.c)

这将构建main.c到两个不同的目标,使用两种不同的语言设置。

文档还暗示能够针对其他目录范围(包括二进制目录)显式地设置该属性。我希望这能使工作简单些,但是我不能使它工作。

由于LANGUAGE确实是每个文件的属性,因此我认为应该发生的事情—并且允许在这里使用适当的习惯用法—是对(目标文件,源文件)具有语言使用的二进制关系。

我已经在问题报告(gitlab.kitware.com)中向KitWare建议了这一点。

相关内容

  • 没有找到相关文章

最新更新