2015-04-01 3 views
1

Я пытаюсь вызвать add_library для всех файлов с определенными окончаниями.Предупреждение CMake: вы вызвали ADD_LIBRARY для библиотеки my_src без каких-либо исходных файлов

Структура НАПРАВЛ:

src 
| - CMakeLists.txt (1) 
| - main.cpp 
| - gui 
     | - CMakeLists.txt (2) 
     | - some source and header files 

Так в настоящее время все куб.см файлы находятся в каталоге графического интерфейса.

(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 

Я знаю, что я в настоящее время не требуется add_library в первом CMakeLists.txt, но позже я это сделаю. Я изменил первый GLOB на GLOB_RECURSE, чтобы он нашел хотя бы что-нибудь.

+0

Кстати, это весьма актуальное предупреждение :) – Antonio

+1

это может быть только потому, что опечатка в 'add_library (my_src $ {my_SOURCES})' вместо 'add_library (my_src $ {my_sources})'? – vladisld

ответ

4

По какой-то причине ваш

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"

Edit:

Реальная проблема заключается в том, что в первом файле CMakeLists.txt вы используете противоречивое именование для переменной (обратите внимание, что casing is important), поэтому вы должны изменить свой add_library (0):

add_library(my_src ${my_sources}) 

Примечание (вне записей :-)): тот факт, что корпус имеет важное значение для имен переменных, может быть c onfusing, потому что, с другой стороны, имена команд cmake нечувствительны к регистру. Также иногда бывает странно замечать, что символ - (минус) может использоваться как часть имени переменной: в большинстве случаев предпочтительнее использовать _ (подчеркивание).

+0

Спасибо за ответ. Я обновил свой вопрос и чаще буду использовать отладочные сообщения. – Sadik

+0

@Sadik Пожалуйста, добавьте вывод, который вы получаете из команды сообщения. И дать некоторые подсказки о файлах в вашей структуре каталогов: где CMakeLists.txt относительно ваших исходных файлов? – Antonio

+0

@Sadik Пожалуйста, проверьте обновленный ответ – Antonio

Смежные вопросы