cmake : externalproject で zlib と libpng を扱う例
目的
CMake の ExternalProject によって既存のプロジェクトへ zlib と libpng を取り込み扱えるようにする方法を紹介したい。
externalproject 例
external_zlib.cmake
cmake_minimum_required( VERSION 3.2 )
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include( ExternalProject )
set( zlib_source_path ${CMAKE_CURRENT_BINARY_DIR}/external/zlib/src/external_zlib/ )
set( zlib_cmake_file_path ${zlib_source_path}/CMakeLists.txt )
ExternalProject_Add( external_zlib
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/zlib
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
# http://www.zlib.net/
GIT_REPOSITORY [email protected]:madler/zlib.git
GIT_TAG v1.2.8
CMAKE_ARGS -DASM686=off
-DAMD64=off
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_COMPILER_IS_GNUCXX=${CMAKE_COMPILER_IS_GNUCXX}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${GL_BINDING_C_FLAGS}
)
external_libpng.cmake
cmake_minimum_required( VERSION 3.2 )
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include( ExternalProject )
set( libpng_source_path ${CMAKE_CURRENT_BINARY_DIR}/external/libpng/src/external_libpng/ )
set( libpng_cmake_file_path ${libpng_source_path}/CMakeLists.txt )
ExternalProject_Add( external_libpng
DEPENDS external_zlib
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/libpng
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
# http://www.libpng.org/pub/png/libpng.html
GIT_REPOSITORY git://git.code.sf.net/p/libpng/code
GIT_TAG v1.6.9
CMAKE_ARGS -DPNG_SHARED=off
-DPNG_STATIC=on
-DPNG_TESTS=on
-DPNG_DEBUG=off
-DPNGARG=off
-DBUILD_SHARED_LIBS=FALSE
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_COMPILER_IS_GNUCXX=${CMAKE_COMPILER_IS_GNUCXX}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${GL_BINDING_C_FLAGS}
)
既存プロジェクト my_app
への依存性とリンク定義の例
include( external_zlib.cmake )
include( external_libpng.cmake )
add_executable( my_app main.cxx )
add_dependencies( my_app
external_zlib
external_libpng
)
target_link_libraries( my_app
png
zlibstatic
)
Note
- 例の
target_link_libraries
では png
より後ろに zlibstatic
を記述する必要があり、順序を逆にするとリンクエラーとなる。
References
cmake_minimum_required( VERSION 3.2 )
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include( ExternalProject )
set( zlib_source_path ${CMAKE_CURRENT_BINARY_DIR}/external/zlib/src/external_zlib/ )
set( zlib_cmake_file_path ${zlib_source_path}/CMakeLists.txt )
ExternalProject_Add( external_zlib
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/zlib
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
# http://www.zlib.net/
GIT_REPOSITORY [email protected]:madler/zlib.git
GIT_TAG v1.2.8
CMAKE_ARGS -DASM686=off
-DAMD64=off
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_COMPILER_IS_GNUCXX=${CMAKE_COMPILER_IS_GNUCXX}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${GL_BINDING_C_FLAGS}
)
cmake_minimum_required( VERSION 3.2 )
include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/lib)
include( ExternalProject )
set( libpng_source_path ${CMAKE_CURRENT_BINARY_DIR}/external/libpng/src/external_libpng/ )
set( libpng_cmake_file_path ${libpng_source_path}/CMakeLists.txt )
ExternalProject_Add( external_libpng
DEPENDS external_zlib
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/libpng
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}
# http://www.libpng.org/pub/png/libpng.html
GIT_REPOSITORY git://git.code.sf.net/p/libpng/code
GIT_TAG v1.6.9
CMAKE_ARGS -DPNG_SHARED=off
-DPNG_STATIC=on
-DPNG_TESTS=on
-DPNG_DEBUG=off
-DPNGARG=off
-DBUILD_SHARED_LIBS=FALSE
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_COMPILER_IS_GNUCXX=${CMAKE_COMPILER_IS_GNUCXX}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_C_FLAGS=${GL_BINDING_C_FLAGS}
)
my_app
への依存性とリンク定義の例
include( external_zlib.cmake )
include( external_libpng.cmake )
add_executable( my_app main.cxx )
add_dependencies( my_app
external_zlib
external_libpng
)
target_link_libraries( my_app
png
zlibstatic
)
Note
- 例の
target_link_libraries
ではpng
より後ろにzlibstatic
を記述する必要があり、順序を逆にするとリンクエラーとなる。
References
Author And Source
この問題について(cmake : externalproject で zlib と libpng を扱う例), 我々は、より多くの情報をここで見つけました https://qiita.com/usagi/items/c5715c50bb56b65d0cd5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .