Перечислите пути к файлам библиотеки в команде target_link_libraries.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Перечислите пути к файлам библиотеки в команде target_link_libraries.

Сообщение Anonymous »

Итак, у меня есть это в CMakeLists.txt:

Код: Выделить всё

cmake_minimum_required(VERSION 3.19)
project(MyHello LANGUAGES CXX)

find_package(deal.II 9.4.2 CONFIG REQUIRED)
find_package(Boost REQUIRED)
find_package(TBB CONFIG REQUIRED)

add_executable(dealII_test dealII_test.cpp)

target_link_libraries(dealII_test
PUBLIC TBB::tbb
PUBLIC TBB::tbbmalloc
PUBLIC TBB::tbbmalloc_proxy
PRIVATE Boost::boost
PRIVATE deal_II
)
Я получаю следующую ошибку в Ninja:

Код: Выделить всё

ninja: error: '/lib', needed by 'dealII_test.exe', missing and no known rule to make it
Если я закомментирую часть PRIVATE Deal_II, я получу более банальные ошибки: файлы заголовков Deal.II не найдены. Следовательно, я уверен, что что-то не так с частью Deal_II в вызове taget_link_libraries(). Я полагаю, что /lib в ошибке должен быть полным путем, где бы он ни был определен.
Проблема в том, что я не могу определить источник неправильного определения, вызывающего ошибку. Итак, я хотел бы знать, как отладить или распечатать содержимое всего, что находится внутри части Deal_II.
Я попробовал ответ, получивший наибольшее количество голосов: «Отображение списка связанных библиотек цели в cmake», но я получаю только то, что уже знаю, просто прочитав сценарий CMake. Мне нужен какой-то полный список файлов DLL/SO/LIB, связанных с исполняемым файлом, а не имена зависимостей высокого уровня, уже перечисленные в CMakeLists.txt.
Я создаю с помощью Conan, поэтому мне лучше попытаться отладить содержимое Deal_II с помощью рецепта и/или задействованных файлов CMakeLists.txt.
Обновить: Вот оскорбительные строки в результирующем ninja.build тестового исполняемого файла (обратите внимание на плавающий символ \lib в LINK_LIBRARIES):

Код: Выделить всё

#############################################
# Link the executable dealII_test.exe

build dealII_test.exe: CXX_EXECUTABLE_LINKER__dealII_test_Release CMakeFiles\dealII_test.dir\dealII_test.cpp.obj | D$:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbb.lib D$:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbbmalloc_proxy.lib D$:\conan2_packages\b\deali2369f58da7895\p\lib\deal_II.lib D$:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbbmalloc.lib \lib
FLAGS = /DWIN32 /D_WINDOWS /GR /EHsc /O2 /Ob2 /DNDEBUG -MD
LINK_FLAGS = /machine:x64 /INCREMENTAL:NO /subsystem:console
LINK_LIBRARIES = D:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbb.lib  D:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbbmalloc_proxy.lib  D:\conan2_packages\b\deali2369f58da7895\p\lib\deal_II.lib  D:\conan2_packages\b\tbb6a85f71ae13a6\p\lib\tbbmalloc.lib  \lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib
LINK_PATH = -LIBPATH:D:\conan2_packages\b\boost8ca5fb33f6fad\p\lib
OBJECT_DIR = CMakeFiles\dealII_test.dir
POST_BUILD = cd .
PRE_LINK = cd .
TARGET_COMPILE_PDB = CMakeFiles\dealII_test.dir\
TARGET_FILE = dealII_test.exe
TARGET_IMPLIB = dealII_test.lib
TARGET_PDB = dealII_test.pdb
Я не знаю, где искать, чтобы избавиться от этой надоедливой \lib, и понятия не имею, откуда она взялась. План Б — просто выполнить replace_in_file() и покончить с этим, но это просто хакерство.


Подробнее здесь: https://stackoverflow.com/questions/798 ... es-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»