我想将所有LANGUAGE
个文件的.c
属性更改为CXX
,以便使用g++
进行编译。
但是,当我在GLOB_RECURSE
中使用set_source_files_properties
的结果时,它似乎没有效果。
我的CMakeLists.txt
中有以下内容,其输出对我没有意义。
get_source_file_property(property_before ${CMAKE_SOURCE_DIR}/examples/one/file.c LANGUAGE)
message(STATUS ${property_before})
# OUTPUT: NOTFOUND
file(GLOB_RECURSE c_sources "*.c")
foreach(c_file ${c_sources})
message(STATUS ${c_file})
# examples/one/file.c is included in the list of files
endforeach(c_file)
set_source_files_properties(c_sources PROPERTIES LANGUAGE CXX)
get_source_file_property(property_after ${CMAKE_SOURCE_DIR}/examples/one/file.c LANGUAGE)
message(STATUS ${property_after})
# OUTPUT: NOTFOUND
set_source_files_properties(${CMAKE_SOURCE_DIR}/examples/one/file.c PROPERTIES LANGUAGE CXX)
get_source_file_property(property_after_manual ${CMAKE_SOURCE_DIR}/examples/one/file.c LANGUAGE)
message(STATUS ${property_after_manual})
# OUTPUT: CXX
源代码树类似于:
.
├── CMakeLists.txt
├── examples # that use my library
│ ├── one
│ │ ├── file.c
│ │ └── CMakeLists.txt
│ ├── …
│ └── CMakeLists.txt
├── include # my library headers
│ ├── header1.h
│ ├── header2.h
│ └── …
├── src
│ ├── src1.cpp
│ ├── src2.cpp
│ └── …
└── test #tests
└── …
很确定我做的事情很愚蠢而且很容易解决,但是我浪费了一个多小时而且我没有找到问题。我真的不想手动添加所有.c
文件: - )
答案 0 :(得分:0)
您需要像这样扩展 c_sources
变量:set_source_files_properties(${c_sources} PROPERTIES LANGUAGE CXX)
,就像您已经在上面的 foreach
中正确执行一样。