将set_source_files_properties与glob_recurse一起使用

时间:2018-04-17 11:11:53

标签: cmake

我想将所有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文件: - )

1 个答案:

答案 0 :(得分:0)

您需要像这样扩展 c_sources 变量:set_source_files_properties(${c_sources} PROPERTIES LANGUAGE CXX),就像您已经在上面的 foreach 中正确执行一样。