GNU/Linux >> Linux Esercitazione >  >> Linux

Cmake su Windows non aggiunge percorsi di libreria condivisi (funziona su Linux)

Windows semplicemente non ha alcuni dei concetti necessari per consentire a CMake di configurare il tuo ambiente di compilazione. Quando si collega Windows cercherà nella stessa directory del file binario, quindi cercherà le directory nel PERCORSO. Non esiste nulla come RPATH, utilizzato sulla maggior parte delle piattaforme Unix, da inserire in altri percorsi più appropriati. Le DLL dovrebbero generalmente essere installate insieme ai tuoi file binari, nella stessa directory.

Secondo me, la migliore pratica su Windows è mettere le DLL accanto ai tuoi binari. CMake tenta di rendere tutto più semplice,

install(TARGETS MyTarget
  EXPORT "MyProjectTargets"
  RUNTIME DESTINATION "${INSTALL_RUNTIME_DIR}"
  LIBRARY DESTINATION "${INSTALL_LIBRARY_DIR}"
  ARCHIVE DESTINATION "${INSTALL_ARCHIVE_DIR}")

installerebbe le DLL nella destinazione RUNTIME, ma inserirà le librerie nella destinazione LIBRARY. Ciò significa che in genere su sistemi operativi simili a Unix lib ha gli oggetti condivisi, ma CMake sa che le DLL sono effettivamente runtime e andrebbero in bin. Speriamo che questo renda le cose più chiare. È impossibile per CMake/Eclipse migliorare davvero così tanto, oltre forse all'inserimento di directory aggiuntive nel tuo PERCORSO quando fai clic su Esegui da Eclipse (non sono sicuro che sia possibile).

Se sei interessato all'albero di compilazione, allora il seguente funzionerebbe bene lì (come suggerito nei commenti qui sotto):

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

Se vuoi permettere che questi vengano sovrascritti (può essere utile) dovrebbero essere protetti anche con i blocchi if(NOT var_name).


Solo una possibile risposta alla mia stessa domanda. Penso che su Linux venga utilizzato rpath per identificare le posizioni delle librerie dipendenti, ma su Windows con mingw non posso utilizzare l'elf parser e quindi non posso utilizzare rpath.


Linux
  1. Windows:cartella condivisa tra Qemu Windows Guest e Linux Host?

  2. Aggiungi un disco a un volume condiviso del cluster in un cluster di failover di Windows

  3. Build multipiattaforma sotto Windows destinato a Linux utilizzando CMake

  4. Collegamento di una libreria condivisa con un'altra libreria condivisa in Linux

  5. Come fare in modo che un ritardo di libreria condivisa venga caricato su Linux

Come aggiungere host Linux e Windows remoti a Icinga 2 per il monitoraggio

Come aggiungere host Windows e Linux a Nagios Server per il monitoraggio

5 migliori sistemi operativi Linux per sostituire Windows XP

6 distribuzioni Linux per sostituire Windows 10 e 7

Come eseguire Windows 95 su Linux

Sicurezza Linux vs Windows