CMake 警告:您在没有任何源文件的情况下为库 my_src 调用了 ADD_LIBRARY
CMake Warning: You have called ADD_LIBRARY for library my_src without any source files
我正尝试为所有具有特定结尾的文件调用 add_library。
目录结构为:
src
| - CMakeLists.txt (1)
| - main.cpp
| - gui
| - CMakeLists.txt (2)
| - some source and header files
所以目前所有的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)
(2) CMakeLists.txt:
file( GLOB my_gui_sources *.cc)
add_library( my_gui ${my_gui_sources} )
qt5_use_modules( my_gui Core Gui Widgets)
但我一直得到这个输出:
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
我知道我目前不需要第一个 CMakeLists.txt 中的 add_library,但稍后我会。我将第一个 GLOB 更改为 GLOB_RECURSE,这样它至少可以找到任何东西。
出于某种原因,您的
file( GLOB my_gui_sources *.cc *.h)
没有找到任何文件。要调试,您可以打印:
message(STATUS "my_gui_sources = ${my_gui_sources}")
可能您想使用 GLOB_RECURSE
,它在子目录中搜索:
file( GLOB_RECURSE my_gui_sources *.cc *.h)
请注意,您不需要将头文件添加到源列表。
请注意,每次向项目添加文件时都必须重新运行 cmake(不会自动调用 cmake,如果您触摸其中一个 cmake 文件,则会发生这种情况)。
Link to documentation of command "file"
编辑:
实际问题是,在您的第一个 CMakeLists.txt 文件中,您使用的变量命名不一致(请注意 casing is important),因此您必须将 add_library
命令更改为:
add_library( my_src ${my_sources} )
注意(关闭记录:-)):大小写对变量名很重要这一事实可能会造成混淆,因为另一方面,在 cmake 命令名称中不区分大小写。有时也很奇怪地注意到字符 -
(减号)可能被用作变量名称的一部分:大多数时候使用 _
(下划线)更可取。
我正尝试为所有具有特定结尾的文件调用 add_library。
目录结构为:
src
| - CMakeLists.txt (1)
| - main.cpp
| - gui
| - CMakeLists.txt (2)
| - some source and header files
所以目前所有的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)
(2) CMakeLists.txt:
file( GLOB my_gui_sources *.cc)
add_library( my_gui ${my_gui_sources} )
qt5_use_modules( my_gui Core Gui Widgets)
但我一直得到这个输出:
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
我知道我目前不需要第一个 CMakeLists.txt 中的 add_library,但稍后我会。我将第一个 GLOB 更改为 GLOB_RECURSE,这样它至少可以找到任何东西。
出于某种原因,您的
file( GLOB my_gui_sources *.cc *.h)
没有找到任何文件。要调试,您可以打印:
message(STATUS "my_gui_sources = ${my_gui_sources}")
可能您想使用 GLOB_RECURSE
,它在子目录中搜索:
file( GLOB_RECURSE my_gui_sources *.cc *.h)
请注意,您不需要将头文件添加到源列表。
请注意,每次向项目添加文件时都必须重新运行 cmake(不会自动调用 cmake,如果您触摸其中一个 cmake 文件,则会发生这种情况)。
Link to documentation of command "file"
编辑:
实际问题是,在您的第一个 CMakeLists.txt 文件中,您使用的变量命名不一致(请注意 casing is important),因此您必须将 add_library
命令更改为:
add_library( my_src ${my_sources} )
注意(关闭记录:-)):大小写对变量名很重要这一事实可能会造成混淆,因为另一方面,在 cmake 命令名称中不区分大小写。有时也很奇怪地注意到字符 -
(减号)可能被用作变量名称的一部分:大多数时候使用 _
(下划线)更可取。