Home > database >  CMake phony target which duplicates another target
CMake phony target which duplicates another target

Time:07-17

I am trying to "duplicate" a target in my CMake file without maintaining 2 targets and all it's dependencies.

For example I have a main target MyBigLibrary

add_library(MyBigLibrary STATIC "")
target_compile_definitions(MyBigLibrary PRIVATE definitions..)
target_include_directories(MyBigLibrary PUBLIC public_directories..)
target_include_directories(MyBigLibrary PRIVATE private_directories..)
target_link_libraries(MyBigLibrary INTERFACE libraries..)
...
...
target_sources(MyBigLibrary ..source files..)

What I am trying to achieve is to have a identical copy of MyBigLibrary target (e.g. MyBigLibraryModified) which then I can feed to external script via add_custom_command.

I know there is way to have 2 targets, but then you have maintain 2 targets and all of it's dependencies.

Is there a way to have a phony target, e.g MyBigLibraryModified which is built only MyBigLibrary, and inherits INTERFACE flags as a dependencies?

CodePudding user response:

Comments under question:

  • ... Are you trying strip symbols from release version of your target? – Marek R
  • @MarekR that is correct. – pureofpure

So you are doing that wrong. You do not need (and you should not have) separate target for stripped version of your library/application.

For stripped version build proves is just a bit different.

One way to do it is just do:

$ cmake --install . --prefix PathWithResultsWithSybols  .....
$ cmake --install . --prefix PathWithStripedResults --strip ....

See cmake doc

CodePudding user response:

When I wanted to create two different libraries containing the same compiled objects but with different features, I used the OBJECT library type containing all the source files, then I created two different libraries that listed the OBJECT target in their target_link_libraries.

The OBJECT library in CMake is still not fully correct, even after years of waiting for it to be enhanced, but it works mostly OK in most situations these days.

See the documentation for more info.

  • Related