Установка зависимостей проекта Visual Studio от CMake - PullRequest
2 голосов
/ 16 июля 2010

Я использую CMake для создания приложения, состоящего из четырех проектов:

  • a.dll , которая не зависит
  • b.dll , что зависит от a.dll
  • c.exe , что зависит от a.dll и b.dll
  • d.exe , который зависит от a.dll и b.dll

Каждый проект (или цель в терминологии CMake) находится в своем собственном подкаталоге и имеет собственный файл CMakeLists.txt . Кроме того, существует файл верхнего уровня CMakeLists.txt , который связывает их всех (используя add_subdirectory).

В CMakeLists.txt файлах b.dll , c.exe и d.exe , которые я использую target_link_libraries, чтобы связать эти цели с библиотеками импорта a.dll и b.dll . Это работает правильно. Пока все хорошо.

Теперь в Visual Studio кажется, что CMake не устанавливает никаких «зависимостей проекта» между различными проектами решения: если я выберу Проект -> Зависимости проекта ... , я можно увидеть, что действительно b.dll не имеет зависимости от a.dll , c.exe не имеет зависимости ни от a.dll , ни b.dll и т. д. В результате порядок сборки проектов по существу случайный, и на практике решение просто не удается построить (поскольку, например, c.exe создается до a.dll , поэтому соответствующая библиотека импорта a.lib еще не создана).

Я довольно озадачен. Я очень тщательно искал в сети ответ, но без удачи (что заставляет меня думать, что это не проблема для большинства пользователей CMake, и я, должно быть, делаю что-то не так).

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

Я использую CMake 2.8.1 и Visual Studio 2008 (9.0).

Спасибо, Franz


Вот файлы CMakeLists.txt , для справки:

top-level CMakeLists.txt :

add_subdirectory(a)
add_subdirectory(b)
add_subdirectory(c)
add_subdirectory(d)

а / CMakeLists.txt

add_library(a SHARED a.cpp)

б / CMakeLists.txt

add_library(b SHARED b.cpp)
target_link_libraries(b a)
# also tried to add add_dependencies(b a) here

с / CMakeLists.txt :

add_executable(c c.cpp)
target_link_libraries(c a b)
# also tried to add add_dependencies(c a b) here

d / CMakeLists.txt

add_executable(d d.cpp)
target_link_libraries(d a b)
# also tried to add add_dependencies(d a b) here

1 Ответ

0 голосов
/ 16 июля 2010

Настройка, описанная в моем вопросе, правильная и работает как положено.Смотрите мой комментарий выше.

...