如何让 CMake 以两种不同的语言编译相同的输入文件?

时间:2021-07-12 16:39:51

标签: c++ c cmake build cross-language

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

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

set_source_files_properties(foo.bar PROPERTIES LANGUAGE C)

但这对我来说似乎没有帮助。我可以在 CMake 级别做些什么吗?

注意事项:

  • 相关问题:The single-arbitrary-language case
  • 对此有非 CMake 解决方案,例如复制文件;使用不同名称的符号链接;有一个以 #include "otherfile" 为内容等的文件。

1 个答案:

答案 0 :(得分:1)

您可以在不同目录(在不同的 mycpplib 中)创建库目标 myclibCMakeLists.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)
相关问题