multiple source building in cmake -


i have following cmake file

cmake_minimum_required(version 2.6)  # locate gtest find_package(gtest required) include_directories(${gtest_include_dirs})  include_directories(../src/gcc_xml_parsing)  file(glob info_model  "../src/info_model/*.h" "../src/info_model/*.cpp" "../src/gcc_xml_parsing/*.h" "../src/gcc_xml_parsing/*.cpp" "../src/messages_filed_with_values/*.h" "../src/messages_filed_with_values/*.cpp"  )  # link runtests want test , gtest , pthread library  add_executable(runtests_xml unit/gcc_xml_parsing/ut_xmlfile.cpp ${info_model} ) add_executable(runtests_hexdumputil unit/info_model/ut_hexdumputil.cpp ${info_model} ) add_executable(runtests_cstruct  unit/info_model/ut_cstruct.cpp ${info_model}) add_executable(runtests_primitive_type_field unit/info_model  /ut_primitivetypefield.cpp    ${info_model}) add_executable(runtests_enumfield unit/info_model/ut_enumfield.cpp ${info_model}) add_executable(runtests_arrayoffields unit/info_model/ut_arraytype.cpp ${info_model})  target_link_libraries(runtests_xml ${gtest_libraries} ${gtest_main_libraries} pthread  boost_regex) target_link_libraries(runtests_hexdumputil ${gtest_libraries} ${gtest_main_libraries} pthread boost_regex ) target_link_libraries(runtests_cstruct ${gtest_libraries} ${gtest_main_libraries} pthread boost_regex ) target_link_libraries(runtests_primitive_type_field ${gtest_libraries} ${gtest_main_libraries} pthread boost_regex ) target_link_libraries(runtests_enumfield ${gtest_libraries} ${gtest_main_libraries} pthread boost_regex ) target_link_libraries(runtests_arrayoffields ${gtest_libraries} ${gtest_main_libraries} pthread boost_regex ) 

in general,after making , running makefile program compiles fine. problem is, make file builds source ${info_model} every add_executable ( makefile building *.o files every executable. how fix ? thanks.

edit: after making changes in cmake (according first answer in post ), application compiles fine, has linkage problems. whole log large, pasting first part:

linking cxx executable runtests_arrayoffields libinfo_model_lib.a(xmlfile.cpp.o): in function `bool   boost::regex_search<__gnu_cxx::__normal_iterator<char const*, std::string>,   std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const* .... 

you can move files static library:

add_library(info_model_lib static ${info_model})  add_executable(runtests_xml unit/gcc_xml_parsing/ut_xmlfile.cpp) [...]  target_link_libraries(runtests_xml ${gtest_libraries} ${gtest_main_libraries} pthread  boost_regex info_model_lib) [...] 

this way source files compiled once (as part of building info_model_lib target) , linked each executable. resulting binary same. depending on compiler used may lose optimizations due change, not enough give measurable decrease in performance.


Comments

Popular posts from this blog

assembly - 8086 TASM: Illegal Indexing Mode -

Java, LWJGL, OpenGL 1.1, decoding BufferedImage to Bytebuffer and binding to OpenGL across classes -

javascript - addthis share facebook and google+ url -