Cmake Добавить новый проект в решение

Я совершенно новичок в cmake, поэтому извините, если задаю этот низкий вопрос, но не могу найти ответ в Google.

Я пытаюсь создать пустой проект поверх Ogre3d SDK. Я создал исходный код ogre3d с помощью cmake и vs2015, теперь я хочу создать свой проект поверх библиотек и заголовков ogre. поэтому, как объяснено здесь, я создаю файл cmakelists.txt и добавляю эти строки к нему:

# specify which version you need
find_package(OGRE 1.10 REQUIRED)

project(OG1)

# the search paths
include_directories(${OGRE_INCLUDE_DIRS})
link_directories(${OGRE_LIBRARY_DIRS})

 # copy essential config files next to our binary where OGRE autodiscovers them
 file(COPY ${OGRE_CONFIG_DIR}/plugins.cfg ${OGRE_CONFIG_DIR}/resources.cfg 
  DESTINATION ${CMAKE_BINARY_DIR})

все в порядке, и успех в создании файлов cmake и создании .sln с помощью cmake-gui но я надеюсь, что cmake создаст пустой проект с именем OG1, тогда я смогу запустить свой первый ogre helloword, но он генерирует .sln файл, который содержит только ALL_BUILD и ZERO_CHECK. Как я могу создать чистый проект, который имеет всю конфигурацию и готов только для использования классов ogre (я имею в виду, что он автоматически настраивает ссылки, включает и т. д.)?


person Mamad R    schedule 13.09.2017    source источник


Ответы (1)


Терминология CMake немного отличается от терминологии Visual Studio.

В частности, каждый CMake project создаст решение Visual Studio. (.sln файл), а все CMake target, принадлежащие этому проекту CMake, будут отображаться как проекты Visual Studio в соответствующем решении.

CMake       Visual Studio

project <-> Solution (.sln)
Target  <-> Project (.vcxproj)

Итак, вашему проекту явно не хватает цели. В вашем случае вам, вероятно, нужна исполняемая цель, которая добавляется с помощью add_executable . Исполняемый файл может иметь то же имя, что и проект. Обратите внимание, что исполняемый файл не может быть полностью пустым в CMake. Хотя концепция пустого исполняемого проекта существует в Visual Studio, она недействительна в других системах сборки, поэтому CMake также не может ее не поддерживать. Поэтому вам нужно указать хотя бы один исходный файл здесь:

add_executable(og1 og1.cpp)

Имея это на месте, вы также можете вместо этого прикрепить оставшиеся параметры сборки к цели. Этот шаг является необязательным, так как ваш код также сработал бы здесь, но считается хорошим стилем в современном CMake:

target_include_directories(og1 PUBLIC ${OGRE_INCLUDE_DIRS})
target_link_libraries(og1 PUBLIC ${OGRE_LIBRARIES})

Обратите внимание, что в CMake мы предпочитаем не использовать каталог библиотеки для сообщения системе сборки о расположении библиотеки, а вместо этого всегда используйте полный путь к файлу библиотеки.

person ComicSansMS    schedule 13.09.2017
comment
спасибо вам! очень красивое объяснение. он работал при создании .sln с помощью cmake. Я собираюсь написать приветствие. поэтому, если у меня есть вопросы о Cmake, позвольте мне задать их здесь. и 1 вопрос, почему этот сайт не использует библиотеки ссылок? они делают это при вызове пакета? - person Mamad R; 13.09.2017