Проблема с каталогом двоичного вывода cion cmake в Windows - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть два проекта cmake на Windows.PROJECT_A выводит исполняемый файл, а PROJECT_B выводит статическую библиотеку.Project_B имеет свой собственный файл cmake и может быть построен самостоятельно.

PROJECT_B находится в подпапке PROJECT_A, а PROJECT_A включает PROJECT_B с использованием функции cmake add_subdirectory ().

PROJECT_B устанавливает переменную среды(PROJECT_B_BUILD_DIR), который содержит значение CMAKE_CURRENT_BINARY_DIR для PROJECT_B, так что PROJECT_A может найти и связать статическую библиотеку, сгенерированную им.

При запуске cmake из командной строки для сборки PROJECT_A, PROJECT_B выдает библиотеку для отладчика или отладчикавнутри PROJECT_B_BUILD_DIR и, таким образом, PROJECT_A связывается с выводом PROJECT_B, используя следующее:

set(LIBS
   debug ${PROJECT_B_BUILD_DIR}/Debug/project_b.lib
   optimized ${PROJECT_B_BUILD_DIR}/Release/project_b.lib
)
target_link_libraries(project_a ${LIBS})

Однако при запуске cmake из CLion подкаталоги Debug и Release не создаются, а библиотеки выводятся непосредственно в PROJECT_B_BUILD_DIR и, таким образом, PROJECT_не удается связать с project_b, потому что пути, переданные в target_link_libraries (), теперь неверны.

Я мог бы решить проблему, удалив Debugи Освободить части путей, переданных в target_link_libraries (), однако это нарушит сборку для любого, кто строит проект из командной строки.

Какая будет хорошая стратегия для решения этой проблемы?

1 Ответ

0 голосов
/ 24 февраля 2019

Если вы включаете другой проект с помощью команды add_subdirectory, вы можете связать библиотеки, созданные в этом проекте, используя их целевые имена :

target_link_libraries(project_a project_b)

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

...