- Oliv,
Bonjour les agrumes
Contexte :
OS = OpenBSD
Librairie : curses & ncurses
Particularité :
- L’implémentation de ncurses sous OpenBSD est la 5.7 pour des raisons de sécurité du code essentiellement et du maintien intégration de l’équipe OpenBSD ; le problème n’est pas ici
- clang -lncurses -lform main.c compile sans soucis ; les librairies sont ici :
/usr/lib/libncurses.a
/usr/lib/libncurses.so.14.0
/usr/lib/libncurses.so.15.0
/usr/lib/libncurses_p.a
/usr/lib/libncursesw.a
/usr/lib/libncursesw.so.14.0
/usr/lib/libncursesw.so.15.0
/usr/lib/libncursesw_p.a
Cas de figure & interrogations
Cas 1 : build des configurations & génération du binaire OK 7936ko CMakeLists.txt
(...)
add_executable(MyExec libs/src/02_add2.c)
target_link_options(MyExec PRIVATE "-lncurses")
Cas 2 : build des configurations & génération du binaire OK 7936ko
(...)
add_executable(MyExec libs/src/02_add2.c)
target_link_libraries(MyExec "/usr/lib/libncurses.so.15.0")
Cas 3 : build des configurations & génération du binaire OK 7968ko
(...)
#set(CURSES_NEED_NCURSES TRUE)
Find_package(Curses REQUIRED)
add_executable(MyExec libs/src/02_add2.c)
target_link_libraries(MyExec PRIVATE ${CURSES_LIBRARIES})
le cas 3 utilisant Find_package() à mon sens est la bonne approche philosophique. Il permet d’appliquer les IMPORTED et de "forcer" la libncurses via la property CURSES_NEED_NCURSES que l’on peut SET à TRUE
- Pourquoi le binaire n’a-t-il pas la même taille avec ou sans Findpackage() ? (7936 ko vs 7968 ko) "target_link_libraries() Ma compréhension est qu’il fournit les indications pour linker LIBRARIES et INCLUDE. Dans le cas 3 si
target_link_libraries(MyExec PRIVATE ${CURSES_LIBRARIES}::${CURSES_INCLUDE_DIRS})
est utilisé la génération des configurations retourne l’erreur ci-dessous au build. |
— Configuring done (1.0s) CMake Error at CMakeLists.txt:34 (target_link_libraries): Target "02_add2c" links to:
/usr/lib/libform.so.7.0::/usr/include
but the target was not found. Possible reasons include:
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.
— Generating done (0.0s) CMake Generate step failed. Build files cannot be regenerated correctly. |
Je comprends qu’il faille seulement utiliser la property IMPORTED par Find_package() : CURSE_LIBRARIES et laisser le code source C gérer l’appel aux headers.
Merci pour vos retours |