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
Post a Comment