c++ - 我怎样才能让 CMake 用两种不同的语言编译同一个输入文件?

标签 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 解决方案,例如复制文件;使用具有不同名称的符号链接(symbolic link);有一个以 #include "otherfile" 作为其内容等的文件

最佳答案

您可以在不同的目录(在不同的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)

关于c++ - 我怎样才能让 CMake 用两种不同的语言编译同一个输入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58862280/

相关文章:

c - 初学者从结构数组中删除第一个元素 (C)

cmake - 为共享库创建 CMake/CPack <Library>Config.cmake

c++ - 为什么cmake的安装文件与实际构建的二进制文件不同?

C++ MinGW 链接器错误 _ZNSt7__cxx1112basic_stringlcSt11char_traitslcESalcEE10_M_replaceEjjPKcj

javascript - 哪个 C 库具有执行 zsh 的递归 glob 的功能?

c - malloc-ing C 中具有结构作为元素的结构?

c++ - 在 C++ 项目中设置 CMAKE_CXX_FLAG 的影响

c++ - std::bind 和 std::function 术语不评估为采用 0 个参数?

c++ - OpenCV Visual Studio ntdll.dll

c++ - 无法在 Qt 中运行 freetype