我有一个库,在几个目录下有几个源文件。我想以一种方式编写一个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有什么问题?
答案 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})