我怎样才能让 CMake 用两种不同的语言编译同一个输入文件?
How can I have CMake compile the same input file in two different languages?
我有一个名为 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"
的文件等
您可以在 不同的目录 (在不同的 CMakeLists.txt
中)创建库目标 mycpplib
和 myclib
。这样您就可以在创建 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)
我有一个名为 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"
的文件等
您可以在 不同的目录 (在不同的 CMakeLists.txt
中)创建库目标 mycpplib
和 myclib
。这样您就可以在创建 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)