CMake警告:您已为库my_src调用ADD_LIBRARY而没有任何源文件

Sad*_*dik 2 cmake qt-creator qt5

我正在尝试为具有特定结尾的所有文件调用add_library.

dir结构是:

src 
 | - CMakeLists.txt (1)
 | - main.cpp
 | - gui
      | - CMakeLists.txt (2)
      | - some source and header files
Run Code Online (Sandbox Code Playgroud)

所以目前所有cc文件都在gui目录中.

(1)CMakeLists.txt:

file( GLOB_RECURSE my_sources *.cc ) 
message(STATUS "my_sources = ${my_sources}")
add_subdirectory( gui )
add_library( my_src ${my_SOURCES} )

target_link_libraries( my_src
  my_gui
)
qt5_use_modules( my_src Core Gui Widgets)
Run Code Online (Sandbox Code Playgroud)

(2)CMakeLists.txt:

file( GLOB my_gui_sources *.cc)

add_library( my_gui ${my_gui_sources} )
qt5_use_modules( my_gui Core Gui Widgets)
Run Code Online (Sandbox Code Playgroud)

但我一直得到这个输出:

You have called ADD_LIBRARY for library my_src without any source files. This typically indicates a problem with your CMakeLists.txt file
-- my_sources = /home/bla/bla/src/gui/BorderLayout.cc;...;/home/bla/bla/my/src/gui/MainWindow.cc
-- my_gui_sources = /home/bla/bla/my/src/gui/BorderLayout.cc;...;/home/bla/bla/my/src/gui/MainWindow.cc
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bla/bla/my/build
Run Code Online (Sandbox Code Playgroud)

我知道我目前在第一个CMakeLists.txt中不需要add_library,但稍后我会.我将第一个GLOB更改为GLOB_RECURSE,以便它至少找到任何内容.

Ant*_*nio 6

出于某种原因你的

file( GLOB my_gui_sources *.cc *.h)
Run Code Online (Sandbox Code Playgroud)

找不到任何文件.要调试,您可以打印:

message(STATUS "my_gui_sources = ${my_gui_sources}")
Run Code Online (Sandbox Code Playgroud)

可能你想使用GLOB_RECURSE,在子目录中搜索:

file( GLOB_RECURSE my_gui_sources *.cc *.h)
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要将头文件添加到源列表.

请注意,每次向项目添加文件时都必须重新运行cmake(不会自动调用cmake,而是触摸其中一个cmake文件时会发生cmake).

链接到命令"文件"的文档

编辑:

实际问题是,在您的第一个CMakeLists.txt文件中,您对变量使用不一致的命名(请注意外壳很重要),因此您必须将add_library命令更改为:

add_library( my_src ${my_sources} )
Run Code Online (Sandbox Code Playgroud)

注意(关闭记录:-)):外壳对变量名称很重要这一事实可能会令人困惑,因为另一方面,cmake命令名称不区分大小写.有时候注意到字符-(减号)可以用作变量名称的一部分有时候很奇怪:使用_(下划线)大部分时间都是可取的.