Abbiamo impostato un progetto cmake con dipendenze esterne della libreria condivisa. Vogliamo impacchettare i binari e le dipendenze del nostro progetto usando CPack. Tuttavia stiamo ottenendo risultati diversi su Windows e Linux quando proviamo a trovare dipendenze dai nostri obiettivi.come utilizzare le funzioni cmake get_prerequisites e get_filename_component per l'installazione della dipendenza target?
Abbiamo dato un'occhiata al modulo GetPrerequisites di CMake (2.8.12). Abbiamo utilizzato con successo il seguente codice CMake per ottenere il percorso completo di una dipendenza target (BINARY) di CMake (_libFile) su linux, tuttavia non ottenere il percorso completo della dipendenza da Windows. Su Windows la variabile dependency_realpath contiene qualcosa come $ {CMAKE_SOURCE_DIR}/DEPENDENCY_FILE, che non è il percorso corretto per la dipendenza.
string(TOUPPER "${CMAKE_BUILD_TYPE}" CONFIG)
GET_TARGET_PROPERTY(MY_BINARY_LOCATION ${BINARY} LOCATION_${CONFIG})
GET_PREREQUISITES(${MY_BINARY_LOCATION} DEPENDENCIES 0 0 "" "")
foreach(DEPENDENCY_FILE ${DEPENDENCIES})
get_filename_component(dependency_realpath ${DEPENDENCY_FILE} REALPATH)
Quindi la domanda sarebbe: Perché stiamo ottenendo risultati diversi per le posizioni di dipendenza su Windows e Linux?
Quali risultati ottieni? Quali risultati ti aspetti? Mi piacerebbe vedere l'output del messaggio "foreach (d $ {DEPENDENCIES}) (" d = '$ {d}' ") endforeach()" Non ci dovrebbe essere bisogno di REALPATH, i risultati di get_prerequisites dovrebbero già percorsi completi ... – DLRdave
Ho stampato il risultato di uno dei miei obiettivi. Sembra che l'elenco contiene solo i nomi dei file, non i percorsi completi: D = 'ITKCommon-4.4.dll' d = 'KERNEL32.dll' d = 'MSVCP100.dll' d = 'MSVCR100.dll' d = 'rpcrt4.dll' d = 'VCOMP100.DLL' d = 'liblinear.dll' d = 'libsvm.dll' d = 'vtkCommon.dll' d = 'vtkFiltering.dll' d = 'vtkGraphics.dll' d = 'vtkHybrid.dll' d = 'vtkIO.dll' d = 'vtkImaging.dll' d = 'vtkRendering.dll' – tisch
questo potrebbe essere correlato a DUMPBIN, che è il gp_cmd? – tisch