Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake: defining link directories and libraries for different build targets

I have a vs2008 project here. Its project files are generated by CMake. What I want to do is define libraries and library directories for the Debug and Release target independently, i.e. release libs for the release target and debug libs for the debug target of course.

So far I have no idea how to do this. I know I can define different compiler arguments with CMAKE_CXX_FLAGS_DEBUG and CMAKE_CXX_FLAGS_RELEASE for example (or however the build targets are named), but I have no idea how to do this for link dirs and libs.

A colleague who created the CMakeLists file with all the definitions tried it with

IF( CMAKE_BUILD_TYPE MATCHES "Debug" )

for example, but that doesn't work. According to some CMake wiki, the variable CMAKE_BUILD_TYPE is not defined at configuration time, only at run time, depending on what target you are running, naturally.

Currently I am sort of at a dead end and would appreciate any hints or directions :).

like image 575
fritzmg Avatar asked Sep 30 '10 09:09

fritzmg


People also ask

What does target link libraries do in CMake?

Specify libraries or flags to use when linking a given target and/or its dependents. Usage requirements from linked library targets will be propagated. Usage requirements of a target's dependencies affect compilation of its own sources.

How do I link a folder in CMake?

Specify directories in which the linker will look for libraries. Specify the paths in which the linker should search for libraries. The command will apply only to targets created after it is called. Relative paths given to this command are interpreted as relative to the current source directory, see CMP0015.


1 Answers

There is a target_link_libraries option that helps you to do that. But you will need to expand your library name to full path.

target_link_libraries(foo
  debug c:/path/to/debug/lib/blah.lib 
  optimized c:/path/to/optimized/lib/blah.lib)

If your library location is named the way CMake do it (Debug/MinSizeRel/RelWithDebInfo/Release), you can use the VS $(ConfigurationName) variable:

link_directories(c:/path/to/all/libs/$(ConfigurationName)/)

Beware, $(ConfigurationName) is not a cmake variable: it will only be expanded by VS during the build/link step.

like image 147
tibur Avatar answered Sep 29 '22 13:09

tibur