【问题标题】:glob_recurse generate error in cmakeglob_recurse 在 cmake 中生成错误
【发布时间】:2014-12-09 14:30:47
【问题描述】:

我有一个库,其中包含多个目录下的多个源文件。我想编写一个 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有什么问题?

【问题讨论】:

    标签: c++ cmake


    【解决方案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}
    

    这样,你可以知道编译的确切顺序……有时顺序很重要

    【讨论】:

      【解决方案2】:

      根据手册正确的语法是:

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

      我怀疑你要么缺少RELATIVE

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

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

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

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


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

      add_library(MyLibrary STATIC ${ALL_Lib_CPP_SRCS})
      

      【讨论】:

        猜你喜欢
        • 2019-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        • 2017-12-28
        • 1970-01-01
        相关资源
        最近更新 更多