如何使用模式为源添加add_library?

时间:2019-08-05 09:14:12

标签: linux cmake

我想使用正则表达式将所有文件添加到add_library,但这不起作用。

我尝试过这个:

add_library(8021qbg SHARED
        8021QBG/"*.h"
        8021QBG/"*.cpp"
        )

并得到这个:

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

    8021QBG/"*.h"

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

我尝试过:

file(GLOB 8021x
        8021x/"*.h"
        8021x/"*.cpp"
        )
add_library(8021x SHARED
        ${8021x}
        )

在编译时,make命令看不到要编译的源。

我想使用某种东西来构建共享库,而不是写下每个源文件(我想是正则表达式)。

如何做到?

2 个答案:

答案 0 :(得分:2)

您需要让cmake将所有匹配的文件列出到一个变量中:

file(GLOB SOURCE_FILES
    8021QBG/*.h
    8021QBG/*.cpp
)

,然后使用此变量:

add_library(8021qbg SHARED
    ${SOURCE_FILES}
)

有关file(GLOB)命令的更多信息。

  

生成与匹配的文件列表,并将其存储到中。通配表达式与正则表达式相似,但是更简单。

答案 1 :(得分:0)

通过以下添加,cmake可以确定要添加的库的名称,从而使脚本上下文不可知。

# libname = current directory name
get_filename_component(libname "${CMAKE_CURRENT_SOURCE_DIR}" NAME)

# .c and .h files
file(GLOB thislibsrc ${CMAKE_CURRENT_SOURCE_DIR}/*.c ${CMAKE_CURRENT_SOURCE_DIR}/*.h)

# include it only once
include_guard(GLOBAL)

# and use it 
add_library(${libname} STATIC ${thislibsrc} )
...

我在中央目录中保存了如此小的组件,因此以后可以像这样调用它们:

include(../addlibscr.cmake)