0

TLDR: I have two projects(Project A & B) using CMakeLists.txt, both build executables and they work separately. Now, I want to use Project A as a library in Project B, let's call this Project AB. How do I do it?

Current Directory Structures :

Project A

rootA
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- CMakeLists.txt with add_subdirectory(libraryA)
 |- libraryA
     |- main.cpp (uses library_A in an example program)
     |- library_A.cpp
     |- library_A.h
     |- Other .h and .cpp files library_A uses
     |- CMakeLists.txt having add_executable (library_A main.cpp library_A.cpp ....)

Project B

rootB
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- CMakeLists.txt with add_subdirectory(libraryB)
 |- libraryB
     |- main.cpp
     |- library_B.cpp
     |- library_B.h
     |- Other .h and .cpp files library_B uses
     |- CMakeLists.txt having add_executable (library_B main.cpp library_B.cpp ....)

Project AB

rootAB
 |- bin
 |   |-
 |- build
 |   |-
 |- external-includes
 |- rootA 
 |- CMakeLists.txt with add_subdirectory(libraryB)
 |- libraryB
     |- main.cpp
     |- library_B.cpp
     |- library_B.h
     |- Other .h and .cpp files library_B uses
     |- CMakeLists.txt having add_executable (library_B main.cpp library_B.cpp .....)

What I've tried so far:

I've tried adding include_directories(rootA/libraryA) and add_sudirectory(rootA) to rootAB/CMakeLists.txt and #include <library_A.h> to rootAB/libraryB/main.cpp, then it complains about linking errors(unresolved external symbol). If I add #include <library_A.cpp> , it will complain about other linking errors from library A, which don't occur if I build library_A separately. Probably what I want to do is to build library_A as a (static) library and link it in ProjectAB (preferably using current directory structure and modifications to CMakeLists.txt(s)). How to do so?

  • 1
    Perhaps you should have the ` add_library` command in the library sub-directories `CMakeLists.txt` file? Then you can use that library in a `target_link_libraries` command. – Some programmer dude Apr 21 '21 at 13:04
  • @Someprogrammerdude Found [this](https://stackoverflow.com/questions/63191635/how-to-build-libraries-with-cmake) , will try and update the question – Abhineet Pandey Apr 21 '21 at 13:11

1 Answers1

0

As done in this example, modify rootAB/rootA/libraryA/CMakelists.txt, replacing

add_executable (library_A main.cpp library_A.cpp ....)

with

add_library (library_A library_A.cpp ....)

and in rootAB/libraryB/CMakelists.txt, add

target_link_libraries(library_B library_A)