[CMake] Linking static targets from sibling directories

Scott MacVicar macvicar at facebook.com
Thu Feb 18 12:15:06 EST 2010


Thanks, I was hoping that cmake would know I wanted the static library linked with the other static library target and grab the object files for that.

Scott

On 18 Feb 2010, at 09:00, "David Cole" <david.cole at kitware.com<mailto:david.cole at kitware.com>> wrote:

You're simply misunderstanding what cmake does with static libs and target_link_libraries.

It does nothing to include all symbols in one library... It simply uses that information to chain all the libs together in a final executable.

You can do:
add_executable(e e.cxx)
target_link_libraries(e one_final_lib_that_depends_on_all_others)

...and then e will be linked against *all* of the libs chained together with target_link_libraries calls.

If you want all the symbols in one static library, you'll have to include all the sources in one add_library call.


HTH,
David


On Thu, Feb 18, 2010 at 11:46 AM, Scott MacVicar <<mailto:macvicar at facebook.com>macvicar at facebook.com<mailto:macvicar at facebook.com>> wrote:
The linking doesn't include the .a files from the other directories, the final lib is missing those symbols.

I checked with nm here, the error doesn't occur until until I attempt to use the built static library.

Scott



On 18 Feb 2010, at 07:36, "David Cole" <<mailto:david.cole at kitware.com>david.cole at kitware.com<mailto:david.cole at kitware.com>> wrote:

What do you mean by "refuses to link the static libraries which are targets from the subfolders"

I looked at your CMakeLists.txt files, which, at first glance, look correct... What error do you get?

If you say "make VERBOSE=1" does it give you more data about what might be going wrong?



On Thu, Feb 18, 2010 at 3:48 AM, Scott MacVicar <<mailto:macvicar at facebook.com><mailto:macvicar at facebook.com>macvicar at facebook.com<mailto:macvicar at facebook.com>> wrote:
Hi,

I've been converting a current autoconf project to use CMake, the layout is such that there is a root directory and 3 sub directories containing various parts of the project.

filters and nls build two static libs and mbfl builds a third static lib that links to the previous two.

root
--filters
--mbfl
--nls

mbfl contains
target_link_libraries(mbfl mbfl_filters)
target_link_libraries(mbfl mbfl_nls)

but refuses to link the static libraries which are targets from the subfolders.

Entire repository is available at <http://github.com/scottmac/libmbfl> <http://github.com/scottmac/libmbfl> http://github.com/scottmac/libmbfl

I could convert it to be built at one single lib in one go but would rather keep parity with the autoconf equivalents.

Any help or pointers would be appreciated.

Scott

_______________________________________________
Powered by <http://www.kitware.com> <http://www.kitware.com> www.kitware.com<http://www.kitware.com>

Visit other Kitware open-source projects at <http://www.kitware.com/opensource/opensource.html> <http://www.kitware.com/opensource/opensource.html> http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: <http://www.cmake.org/Wiki/CMake_FAQ> <http://www.cmake.org/Wiki/CMake_FAQ> http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
<http://www.cmake.org/mailman/listinfo/cmake><http://www.cmake.org/mailman/listinfo/cmake>http://www.cmake.org/mailman/listinfo/cmake


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20100218/eac622ca/attachment-0001.htm>


More information about the CMake mailing list