glob_recurse在cmake中生成错误

时间:2014-12-08 17:24:46

标签: c++ cmake

我有一个库,在几个目录下有几个源文件。我想以一种方式编写一个cmake,它将所有这些添加到项目中而不需要单独编写它们。

我在我的cmake中使用这一行:

FILE(GLOB_RECURSE ALL_Lib_CPP_SRCS  src/Library/ *.cpp)
add_library(MyLibrary STATIC ALL_Lib_CPP_SRCS)

但生成msvc项目没有包含所有文件,我在运行cmake时收到此消息:

CMake Error at CMakeLists.txt:49 (add_library):
Cannot find source file:

ALL_Lib_CPP_SRCS
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx

这个cmake有什么问题?

2 个答案:

答案 0 :(得分:1)

应该是:

FILE(GLOB_RECURSE ALL_Lib_CPP_SRCS "src/Library/*.cpp")
add_library(MyLibrary STATIC ${ALL_Lib_CPP_SRCS})

在我看来,您手动定义来源更好:

set (_SOURCES source3.cpp source2.cpp source1.cpp main.cpp)
# now use ${_SOURCES}
通过这种方式,你可以知道编译的确切顺序......有时订单很重要

答案 1 :(得分:0)

根据手册的正确语法是:

 file(GLOB_RECURSE variable [RELATIVE path] [FOLLOW_SYMLINKS] [globbing expressions]...)

我怀疑你错过了RELATIVE

FILE(GLOB_RECURSE ALL_Lib_CPP_SRCS RELATIVE "src/Library/" "*.cpp")

或者你在globbing表达式中有一个额外的空格:

FILE(GLOB_RECURSE ALL_Lib_CPP_SRCS "src/Library/*.cpp")

我怀疑上面的第二个选项是你想要的。引号是可选的,但我建议使用它们,因为它使线更易于阅读IMO。


第二个问题是,在引用变量时需要${}

add_library(MyLibrary STATIC ${ALL_Lib_CPP_SRCS})