Listen Sie die Bibliotheksdateipfade im Befehl target_link_libraries aufC++

Programme in C++. Entwicklerforum
Anonymous
 Listen Sie die Bibliotheksdateipfade im Befehl target_link_libraries auf

Post by Anonymous »

Also, ich habe das in einer CMakeLists.txt:

Code: Select all

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
)
Ich erhalte in Ninja die folgende Fehlermeldung:

Code: Select all

ninja: error: '/lib', needed by 'dealII_test.exe', missing and no known rule to make it
Wenn ich den Teil PRIVATE deal_II auskommentiere, erhalte ich alltäglichere Fehlermeldungen, dass Deal.II-Headerdateien nicht gefunden werden. Daher bin ich mir sicher, dass etwas mit dem Deall_II-Teil im taget_link_libraries()-Aufruf nicht stimmt. Ich gehe davon aus, dass /lib im Fehler ein vollständiger Pfad dort sein sollte, wo er definiert wurde.
Das Problem ist, dass ich den Ursprung der Fehldefinition, die den Fehler verursacht, nicht finden kann. Daher würde ich gerne wissen, wie ich den Inhalt von allem, was sich im Deal_II-Teil befindet, debuggen oder drucken kann.
Ich habe die am häufigsten gewählte Antwort „Anzeigen der Liste der verknüpften Bibliotheken eines Ziels in cmake“ ausprobiert, aber ich bekomme nur das, was ich bereits weiß, indem ich einfach das CMake-Skript lese. Ich hätte gerne eine Art vollständige Liste der DLL/SO/LIB-Dateien, die mit der ausführbaren Datei verknüpft werden, und nicht die Abhängigkeitsnamen auf hoher Ebene, die bereits in CMakeLists.txt aufgeführt sind.
Ich baue mit Conan, daher ist es besser, wenn ich versuche, den Inhalt von Deal_II über das Rezept und/oder die beteiligten CMakeLists.txt-Dateien zu debuggen.
Update: Hier ist das Problem Zeilen im resultierenden ninja.build der ausführbaren Testdatei (beachten Sie die frei schwebende \lib in LINK_LIBRARIES):

Code: Select all

#############################################
# 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
Ich weiß nicht, wo ich suchen soll, um diese lästige \lib loszuwerden, und ich habe auch keine Ahnung, woher sie kommt. Plan B besteht darin, einfach ein replace_in_file() auszuführen und damit fertig zu sein, aber das ist einfach nur hackig.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post