J'ai un ancien projet et je veux utiliser cMake au lieu des anciens autotools. Ce que l'ancien programme fait est que, après le type make, il fera libtest.a, libtest.la, libtest.so.1.0.0 etc. dans un dossier caché appelé .libs, puis après je tape make install , il installera toutes les bibliothèques dans un dossier cible $ TEST_ROOT/lib (variable d'environnement), il installera également tous les fichiers .h dans le dossier $ TEST_ROOT/include.cmake: comment installer les répertoires include/et lib/en tant qu'autotool?
dans le Makefile.am:
source_list=test1.cpp test2.cpp
include_HEADERS=test1.h test2.h
AM_LDFLAGS="-pthread -lm -lrt"
lib_LTLIBRARIES=libtest.la
libtest_la_SOURCES=$(source_list)
libtest_la_LDFLAGS=$(AM_LDFLAGS) -static-libgcc
dans configure.ac, je ne vois qu'une seule ligne pertinente,
if test -n "${TEST_ROOT}"; then
ac_default_prefix=${TEST_ROOT}
includedir=${ac_default_prefix}/include
fi
Franchement, je ne comprends pas vraiment pourquoi les codes ci-dessus feront. a, .la, .so etc. bibliothèques ensemble, puis les installer dans le dossier correspondant. Probablement autotools peut reconnaître le "ac_default_prefix" et "includeddir"?
Quoi qu'il en soit, je veux faire la même chose avec cmake, ce qui suit est ma tentative, mais pas une solution complète.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/.libs)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $(CMAKE_BINARY_DIR}/.libs)
set(CMAKE_CXX_FLAGS "-O3 -Wall")
set(CMAKE_EXE_LINKER_FLAGS "-pthread -lm -lrt")
file(GLOB SOURCES "*.cpp")
add_library(test STATIC ${SOURCES})
Le code ci-dessus compilera libtest.a dans le dossier de construction, pas dans le dossier .libs l'intérieur du dossier de construction (ce qui signifie que CMAKE_RUNTIME_OUTPUT_DIRECTORY etc ne fonctionne pas).
En second lieu, il ne construira libtest.a, il n'y a pas libtest.la, pas libtest.so.1.0.0 etc.
Troisièmement, je ne suis toujours pas sûr de savoir comment laisser faire installer travail comme l'auto outils. Puis-je simplement définir le répertoire include cible et le répertoire lib cible, puis make install va installer tous les fichiers .h et les fichiers .so, .a, .la dans le répertoire cible?
Aidez-nous s'il vous plaît.
Merci.
CMake a une commande spéciale pour l'installation - [install()] (https: // cmake.org/cmake/help/v3.0/commande/install.html). Vérifiez la documentation pour cela, probablement les choses deviennent claires. Comme pour les variables 'CMAKE _ * _ OUTPUT_DIRECTORY', chacune d'elles affecte seulement le type spécifique de la bibliothèque/exécutable. Les bibliothèques statiques sont affectées par [CMAKE_ARCHIVE_OUTPUT_DIRECTORY] (https://cmake.org/cmake/help/v3.0/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.html). En outre, lorsque vous construisez une bibliothèque STATIC, pourquoi vous attendez-vous à ce que '.la' et' .so' soient compilés? Actuellement, votre question comporte trop de sous-questions, essayez de vous concentrer sur l'une d'entre elles. – Tsyvarev
Je suis entièrement d'accord avec le trop de revendications sous-questions. – steveire