Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a LINK_DIRECTORIES or equivalent property in CMake?

Tags:

cmake

I have created a project with a large number of link_directories() commands. I'd now like to store the resulting string of directories into a variable. For include_directories() this is easy using

get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )

however there seems to be no LINK_DIRECTORIES property to do

get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )

Is there a way to get a list of link directories used for a target?

(Note: I realize I could manually track the link directories in a variable myself and then use a single link_directories() but it doesn't seem very clean)

like image 728
user2746401 Avatar asked Aug 06 '14 15:08

user2746401


People also ask

What does Link_directories do Cmake?

Add directories in which the linker will look for libraries. Adds the paths in which the linker should search for libraries. Relative paths given to this command are interpreted as relative to the current source directory, see CMP0015 .

What is target_ link_ libraries in CMake?

target_link_libraries. Overview. Libraries for a Target and/or its Dependents. Libraries for both a Target and its Dependents. Libraries for a Target and/or its Dependents (Legacy)


1 Answers

Take a look at the LINK_DIRECTORIES directory property.

The point is that link_directories operates on a per-directory basis (the command affects all targets defined in the same CMakeLists, as well as targets from all of its subdirectories), unlike, for instance, target_include_directories which works on a per-target basis.

You can query the value of the property with:

get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)

if called from the same directory as the link_directories call. Otherwise, you need to give the (full or relative) path as an additional argument after DIRECTORY. Unfortunately, I know of no way to obtain the matching directory for an existing target.

Note that in general the use of link_directories is discouraged in CMake, which is probably the main reason why it's not supported very well. Unless you have very good reasons not to, you should always stick with full library paths passed to target_link_libraries. It will save you lots of headaches in the long run.

like image 97
ComicSansMS Avatar answered Nov 09 '22 01:11

ComicSansMS