Sto cercando di avere CMake 2.8.6 link per boost :: program_options utilizzando il seguente codice nel mio CMakeLists.txtCMake FIND_PACKAGE riesce ma restituisce strada sbagliata
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
ADD_EXECUTABLE (segment segment.cpp)
TARGET_LINK_LIBRARIES (segment ${Boost_LIBRARIES})
Il comando find sembra riuscire ma passa la directory sbagliata per il linker. Il pacchetto è in realtà:
`/usr/lib64/libboost_program_options-mt.so.5`
ma CMakeFiles/segment.dir/link.txt
elenca i seguenti:
/cm/shared/apps/gcc/4.4.6/bin/c++ CMakeFiles/segment.dir/segment.cpp.o -o segment -rdynamic /usr/lib64/lib64/libboost_program_options-mt.so.5 -lpthread -lrt -Wl,-rpath,/usr/lib64/lib64
nota l'extra lib64
nel percorso. Inoltre, la flag -l di fronte al percorso sembra mancare.
Quando si esegue CMake esso segnala che trova correttamente il pacchetto, e la variabile {$Boost_LIBRARIES}
sembra di elencare le librerie corrette:
Boost found.
Found Boost components:
program_options
${Boost_LIBRARIES} - optimized;boost_program_options-mt-shared;debug;boost_program_options-mt-shared-debug
Il file generato CMakeCache.txt inizia con:
//The directory containing a CMake configuration file for Boost.
Boost_DIR:PATH=/usr/lib64/boost
//Boost include directory
Boost_INCLUDE_DIR:FILEPATH=/usr/include
Che sembra essere corretto Ma quando si esegue lo rendono utilizza il percorso in link.txt sopra e ottengo l'errore:
make[2]: *** No rule to make target `/usr/lib64/lib64/libboost_program_options-mt.so.5', needed by `segment'. Stop.
make[1]: *** [CMakeFiles/segment.dir/all] Error 2
make: *** [all] Error 2
cosa potrebbe causare questa iniezione in più di una sottocartella nel percorso? Cosa potrebbe causare che link.txt sia generato in questo modo? E come posso risolvere il problema (o aggirarlo)?
Puoi aggiungere 'SET (Boost_DEBUG 1)' prima di 'FIND_PACKAGE' e' MESSAGE ("\ $ {Boost_LIBRARIES} - $ {Boost_LIBRARIES}") 'dopo' FIND_PACKAGE' nel tuo CMakeLists.txt. Quindi elimina CMakeCache.txt, esegui CMake e incolla l'output come modifica alla tua domanda. – Fraser
@Fraser Sembra trovare le librerie corrette, ecco l'output (anche incluso sopra): '$ {Boost_LIBRARIES} - ottimizzato; boost_program_options-mt-shared; debug; boost_program_options-mt-shared-debug' – CvW
Come soluzione alternativa, come posso impostare manualmente il percorso del collegamento? – CvW