c++ - 如何让 CMake 用两种不同的语言编译相同的输入文件?
问题描述
我有一个名为foo.bar
. 我想将它作为 C++ 文件编译一次,编译为mycpplib
库目标,一次编译为 C 文件,编译为myclib
目标;我想在同一个版本中使用相同的CMakeLists.txt
.
现在,我知道我可以任意设置源文件的关联语言,如下所示:
set_source_files_properties(foo.bar PROPERTIES LANGUAGE C)
但这看起来对我的情况没有帮助。我可以在 CMake 级别做些什么吗?
笔记:
- 相关问题:单一任意语言案例。
- 对此有非 CMake 解决方案,例如复制文件;使用具有不同名称的符号链接;有一个文件
#include "otherfile"
作为其内容等。
解决方案
您可以创建库目标mycpplib
并myclib
在不同的目录中(在不同的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)
推荐阅读
- swift - Swift蓝牙文件,写入消息并等待响应
- react-native - 了解 React native 中的 padding left 和 position absolute ,布局问题
- r - R / ggplot2 / geom_density:如何在单元格中使用值而不是条目数
- python - 无法在 Robot 框架中使用 ibm_db api 连接到 DB2
- javascript - 如何在 vue-jekyll 中为单个文件组件添加样式标签?
- python - Python - 如何通过路径删除字典中的深层嵌套节点?
- javascript - 计算 JSON 中的值并将其转换为数字形式
- database - Delphi FireDAC 连接超时或强制中止连接建立过程
- boost - Yocto sumo 与 RPI3B+ 与旧 Boost
- apache-spark - 数据框中的地图 - pyspark