如何让CMake用两种不同的语言编译同一个输入文件



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

现在,我知道我可以任意设置源文件的相关语言,比如:

set_source_files_properties(foo.bar PROPERTIES LANGUAGE C)

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

注:

  • 相关问题:单个任意语言案例
  • 对此有非CMake解决方案,例如复制文件;使用具有不同名称的符号链接;具有以CCD_ 5作为其内容的文件等

您可以在不同的目录(在不同的CMakeLists.txt中(中创建库目标mycpplibmyclib。这样,您可以在创建mycpplib库的目录中调用set_source_files_properties,该调用不会影响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)

相关内容

  • 没有找到相关文章

最新更新