首页 > 解决方案 > 如何让 CMake 用两种不同的语言编译相同的输入文件?

问题描述

我有一个名为foo.bar. 我想将它作为 C++ 文件编译一次,编译为mycpplib库目标,一次编译为 C 文件,编译为myclib目标;我想在同一个版本中使用相同的CMakeLists.txt.

现在,我知道我可以任意设置源文件的关联语言,如下所示:

set_source_files_properties(foo.bar PROPERTIES LANGUAGE C)

但这看起来对我的情况没有帮助。我可以在 CMake 级别做些什么吗?

笔记:

标签: c++ccmakebuildcross-language

解决方案


您可以创建库目标mycpplibmyclib不同的目录中(在不同的CMakeLists.txt)中。这样您就可以在创建库set_source_files_properties的目录中mycpplib调用,并且该调用不会影响myclib.

命令set_source_files_properties也有 DIRECTORY 和 TARGET_DIRECTORY 选项,这可能会影响属性可见的目录:

# In 'c/CMakeLists.txt`
# add_library(myclib ${CMAKE_SOURCE_DIR}/foo.bar)
# In 'cpp/CMakeLists.txt`
# add_library(mycpplib ${CMAKE_SOURCE_DIR}/foo.bar)
# In CMakeLists.txt
add_subdirectory(c)
add_subdirectory(cpp)
set_source_file_properties(foo.bar TARGET_DIRECTORY myclib
  PROPERTIES LANGUAGE C)
set_source_file_properties(foo.bar TARGET_DIRECTORY mycpplib
  PROPERTIES LANGUAGE CXX)

推荐阅读