c++ - How do I share headers and libraries in subdirectory by cmake? -
i want use headers , libs common libraries app1 , app2. project tree below. image/
, math/
library directories used app1 , app2. in case, should set same settings both cmakelists.txt
under app1 , app2? of course know works, there smarter ways set common libraries?
|-- cmakelists.txt |-- app1 | |-- cmakelists.txt | `-- main.cc |-- app2 | |-- cmakelists.txt | `-- main.cc |-- image | |-- cmakelists.txt | |-- include | | `-- image_func.h | `-- src | `-- image_func.cc `-- math |-- cmakelists.txt |-- include | `-- math_util.h `-- src `-- math_util.cc
roots cmakelists.txt
below. possible set math , image parameters app1 , app2? actual project has many applications uses multiple libraries.
cmake_minimum_required(version 2.8) add_subdirectory("./image") add_subdirectory("./math") add_subdirectory("./app1") add_subdirectory("./app2")
with newer versions oft cmake (since 2.8.12) can use target_link_libraries
, related functions manage dependencies. specifying public includes , libraries applied targets using library. reduce duplication minimum.
for math , image need specify respective include directory used , libraries might require.
math/cmakelists.txt
add_library(math ...) target_include_directories(math public include ...) target_link_libraries(math public ...)
image/cmakelists.txt
add_library(image ...) target_include_directories(image public include ...) target_link_libraries(image public ...)
app1/cmakelists.txt
add_executabke(app1 ...) target_link_libraries(app1 public image math)
app2/cmakelists.txt
add_executabke(app2 ...) target_link_libraries(app2 public image math)
Comments
Post a Comment