CMake - вызывается add_executable с неверным количеством аргументов - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь организовать проект C ++, который начинает иметь много файлов. Я хотел бы создать два исполняемых файла, которые совместно используют некоторый исходный файл, используя Cmake. Я нашел интересную процедуру здесь:

Как добавить исходные файлы в другую папку

Ниже моя версия вещи

file(GLOB Common_sources RELATIVE "Common" "*cpp")
file(GLOB Mps_sources RELATIVE "Mps" "*.cpp")                 
file(GLOB Mss_sources RELATIVE "Mss" "*.cpp") 

add_executable(test_mss ${Common_sources} ${Mss_sources}) 
add_executable(test_mps ${Common_sources} ${Mps_sources})

Но CMake жалуется

CMake Error at src/CMakeLists.txt:44 (add_executable):
add_executable called with incorrect number of arguments

CMake Error at src/CMakeLists.txt:45 (add_executable):
add_executable called with incorrect number of arguments

Там сказано посмотреть CMakeOutput.log, но файл действительно слишком длинный, я не могу найти полезную информацию.

Я проверил документацию по CMake, похоже, что в качестве дополнительного аргумента может использоваться второй источник. https://cmake.org/cmake/help/v3.0/command/add_executable.html

Я бы хотел найти источник этой ошибки. У меня такое чувство, что я упускаю что-то очевидное здесь.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Вы получаете ошибку, потому что список источников, переданный add_executable, фактически пуст.

Правильный путь для сбора источников в подкаталоге Common/:

file(GLOB Common_sources "Common/*.cpp")

В команде file (GLOB) RELATIVE опция не указывает каталог поиска .Вместо этого он просто указывает CMake генерировать относительные пути вместо абсолютных:

Если указан флаг RELATIVE, результаты будут возвращены как относительные пути к указанному пути.

Предполагая

file(GLOB Common_sources "Common/*.cpp")
# gets: /<path-to-source>/Common/my_source.cpp

затем (также обратите внимание на абсолютный путь в опции RELATIVE)

file(GLOB Common_sources RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/Common" "Common/*.cpp")
# gets: my_source.cpp

и (когда файлы не находятся под RELATIVE каталог)

file(GLOB Common_sources RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/Mps" "Common/*.cpp")
# gets: ../Common/my_source.cpp
0 голосов
/ 12 мая 2018

Вы должны заключить переменные в кавычки.

add_executable(test_mss "${Common_sources}" "${Mss_sources}")

В противном случае для пустой переменной CMake заменяет переменную ничем, а количество аргументов кажется неправильным.

Аналогичная проблема:https://stackoverflow.com/a/39733128/2799037

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...