Antonio Sesto
Antonio Sesto

Reputation: 3184

CMake: collecting libraries

I am using CMake to build a simple C++ project, hereafter named P. The structure of P is quite simple:

I would like to collect the libraries in package1, package2, ... in a variable called P_LIBS.

In a first attempt, I tried to collect the libraries available in package1, package2, ... in the variable called P_LIBS initially set in the src/CMakeLists.txt file. However, the updates to P_LIBS made in the CMakeLists.txt of the subfolders are not propagated to the parent folder.

I would rather not write a list of libraries in the main CMakeLists.txt file. I would rather modify such variable while moving in the directory tree.

After a search on the internet I could not find any valid suggestion. If I look at the various Find files, I only see long listings of libraries in their main CMakeLists.txt file.

Is there a way to do what (I hope) I explained above?


Thanks to sakra's link I was able to 'propagate' names up to the parent folder. However, the names I add to the P_LIBS variable are later interpreted as 'library' names, not as reference to CMake targets. In other words, if

P_LIBS = {a, b}

the 'a' and 'b' are interpreted as the library names, i.e. CMake generates:

gcc [...] -l a -o exe

instead of

gcc [...] /path/to/a.o -o exe 

(.o or other extensions)

Upvotes: 0

Views: 952

Answers (1)

ronkot
ronkot

Reputation: 6367

You are propably constructing the targets list as a string, try to make them a list instead. For example:

# in package1/CMakeLists.txt
set(P_LIBS ${P_LIBS} a b PARENT_SCOPE) 

Upvotes: 1

Related Questions