I forgot to update the include path in the patch I sent you. It should be like this (note that it contains just "include", not "include/kImageAnnotator"):
target_include_directories(kImageAnnotator PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) And kImageAnnotator.h should change the export include to: #include "kImageAnnotatorExport.h" You still have a bigger problem, though. kImageAnnotator.h is including private headers #include "../../src/gui/VisibilitySwitcher.h" #include "../../src/annotations/core/AnnotationArea.h" #include "../../src/backend/Config.h" #include "../../src/widgets/ToolPicker.h" #include "../../src/widgets/ColorPicker.h" #include "../../src/widgets/SizePicker.h" #include "../../src/widgets/FillPicker.h" If those are required by your clients, then they should be in the "include/kImageAnnotator" directory and installed along with "kImageAnnotator.h". Otherwise, consider using the pimpl idiom and remove the includes from the public header. El mié., 22 de ago. de 2018 a la(s) 17:08, Damir Porobic ( damir_poro...@live.com) escribió: > Thanks you Sebastián for finding the issue and fixing the CMake, probably > would have never found out that it was set to private. > > > The kImageAnnotator-example is working now as expected. Do I need > something else, except installing the lib, in order to use it in different > projects? I've created a second project which is identical to the > kImageAnnotator-example but I get following when I try to build it: > > > [ 50%] Building CXX object CMakeFiles/testApp.dir/main.cpp.o > In file included from /home/dporobic/projects/testApp/main.cpp:2:0: > /usr/local/include/kImageAnnotator/KImageAnnotator.h:31:35: fatal error: > KImageAnnotatorExport.h: No such file or directory > #include <KImageAnnotatorExport.h> > ^ > compilation terminated. > > The includes look like this: > > #include <QApplication> > #include <kImageAnnotator/KImageAnnotator.h> > > > And the CMake looks like this: > > find_package(kImageAnnotator REQUIRED) > > add_executable(testApp main.cpp) > target_link_libraries(testApp kImageAnnotator) > > > Am I missing something again? > > > > ------------------------------ > *From:* Sebastián Mancilla <smanc...@jlab.org> > *Sent:* Wednesday, August 22, 2018 00:51 > *To:* Eric Noulard > *Cc:* Damir Porobic; cmake@cmake.org > *Subject:* Re: [CMake] Problem with creating shared library > > I fixed your problem. Get the attached patch and apply it with "git apply > <patch_file>". > > The kImageAnnotator constructor was private to the library (I just learned > that Qt does that when creating shared libraries), and that's why you get > the undefined reference error. You could have checked it with: > > nm lib/libkImageAnnotator.so | c++filt | grep ::KImage > 00000000000141f6 t KImageAnnotator::KImageAnnotator(QPixmap const&) > 00000000000141f6 t KImageAnnotator::KImageAnnotator(QPixmap const&) > > The "t" shows it is private. > > You have to set the proper export macros to make it visible: > > > https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application > <https://urldefense.proofpoint.com/v2/url?u=https-3A__wiki.qt.io_How-5Fto-5Fcreate-5Fa-5Flibrary-5Fwith-5FQt-5Fand-5Fuse-5Fit-5Fin-5Fan-5Fapplication&d=DwMFAw&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=y6-B01YTd3TICi74QxO0LfDQVtz1m7fckmS3ItKkAmE&s=WmSjv8Q5QDreoWKNX4mS9hZm6lMR1pfhmDpjVug9nKU&e=> > http://doc.qt.io/qt-5/sharedlibra > How to create a library with Qt and use it in an application > <https://urldefense.proofpoint.com/v2/url?u=https-3A__wiki.qt.io_How-5Fto-5Fcreate-5Fa-5Flibrary-5Fwith-5FQt-5Fand-5Fuse-5Fit-5Fin-5Fan-5Fapplication&d=DwMFAw&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=y6-B01YTd3TICi74QxO0LfDQVtz1m7fckmS3ItKkAmE&s=WmSjv8Q5QDreoWKNX4mS9hZm6lMR1pfhmDpjVug9nKU&e=> > wiki.qt.io > This tutorial illustrates different approaches for using a custom library > in your application on Windows. The first part explains how to create a > shared library and how to link against it in your application. The second > part is about creating and using a static library. Creating a shared > library ... > ry.html > <https://urldefense.proofpoint.com/v2/url?u=http-3A__doc.qt.io_qt-2D5_sharedlibrary.html&d=DwMFAw&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=y6-B01YTd3TICi74QxO0LfDQVtz1m7fckmS3ItKkAmE&s=I_GD4gkI-8u5o_gjXOD-wZKguDdfF2Gu4YG3Swst3hY&e=> > > The patch does that, and now the example links with the library just fine. > The kImageAnnotatorExport.h header defines the macro, the compile > definition is set for the shared library target in the CMakeLists.txt. I > guess you'll have to do the same for all classes used by the unit tests, > no sure of the Qt development practices. > > I also reworked your CMake files a bit. I am sending a single patch, > though. Sorry. > > > El mar., 21 de ago. de 2018 a la(s) 14:29, Eric Noulard ( > eric.noul...@gmail.com) escribió: > > > > Le lun. 20 août 2018 à 19:05, Damir Porobic <damir_poro...@live.com> a > écrit : > > Hi Eric, > > > yes, this is the project. I have pushed my current state to this branch > https://github.com/DamirPorobic/kImageAnnotator/tree/sharedLibTestBranch > <https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_DamirPorobic_kImageAnnotator_tree_sharedLibTestBranch&d=DwMFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=r4LA5jjr_jrRNhddqyy5IsuqRRwHEPCwRMFbxoU1ChI&s=j_vYMAeNlkSJPzPWt5eGGRXiqm4RocWUGgyctA8SGE4&e=> > > I've tried also without the generate_export_headers (cleaned everything up > before trying out) but I get the same result. > > > KImageAnnotator::KImageAnnotator(QPixmap const&)should be exposed by the > handwritten file, that's true, I think I got something mixed up there and I > don't actually need the generate_export_headers, but as said, even > without the line, it's not working. > > > I'm quite lost with the file layout. > > in example/main.cpp you do: > #include <kImageAnnotator/KImageAnnotator.h> > so I guess you expect that > target_link_libraries(kImageAnnotator-example PRIVATE > kImageAnnotator::kImageAnnotator) > > will bring you the include path to "kImageAnnotator/KImageAnnotator.h" > along with the [imported] target > > in your main tree (not in example) there is a trick because you did: > > add_library(kImageAnnotator::kImageAnnotator ALIAS kImageAnnotator) > > and then in the test directory you do: > > target_link_libraries(${UnitTestName} Qt5::Test kimageannotator_LIB) > > with > > add_library(kimageannotator_LIB STATIC ${kimageannotator_SRCS}) > > so AFAIU you compile your kImageAnnotator library twice. Once for building > the target you expect to use in example/ subdir > and another time as a STATIC lib for the unit test. So the unit test is > not linking to the same object lib at all ?? > > I am not used to KDE development but all this seems very fuzzy to me. > > May be you could get more precise help from people who know better about > KDE dev and the specific CMake machinery that comes along > like ECM (https://github.com/KDE/extra-cmake-modules > <https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_KDE_extra-2Dcmake-2Dmodules&d=DwMFaQ&c=lz9TcOasaINaaC3U7FbMev2lsutwpI4--09aP8Lu18s&r=8hmSv9ww5s9qu3iT8h5WMi8-YcKXaJvelxT3fMih7S4&m=r4LA5jjr_jrRNhddqyy5IsuqRRwHEPCwRMFbxoU1ChI&s=LaNKLek4ewlsoy7ECnW4qRmkBAAVUeo6iTSFqsT9ACo&e=>) > you seems to be using. > > -- > Eric > > > > -- > Sebastian Mancilla Matta > CCTVal, UTFSM > Valparaíso, Chile > -- Sebastian Mancilla
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake