Skip to content

cnruby/w3h1_cmake

 
 

Repository files navigation

Hello, Multiple Versions!

Building Multiple Versions of a Shared Library Using CMake



@Gitter :gitter.im/cnruby
Code ID: basic_126
Code Name: Hello, Multiple Versions!

Youtube Video

TABLE of CONTENTS

About The Project

About The Project

Requirements

Install The Library SQLite3

# For MacOS
brew install sqlite

Get The Code with Shell Commands

#<!-- markdown-exec(cmd:cat ../get_project.sh) -->#!/bin/bash
# ./get_project.sh <PROJECT_ID>
# ./get_project.sh basic_126
#
PROJECT_HOME=$HOME/Documents/dev/cpp-ws/$1
git clone https://github.com/cnruby/w3h1_cmake.git $PROJECT_HOME
cd $PROJECT_HOME && git checkout $1
code $PROJECT_HOME
#<!-- /markdown-exec -->

Demonstrate Building Multiple Versions

The CMake Codes of Project

#<!-- markdown-exec(cmd:cat src/CMakeLists.txt) -->#
add_executable( brew_main_126 main_brew.cxx )
target_include_directories(
  brew_main_126 PRIVATE ${_PROJECT_CONFIG_DIR}
)
target_link_libraries(
  brew_main_126 PRIVATE Sqlite3Brew
)
add_executable( os_main_126 main_os.cxx )
target_include_directories(
  os_main_126 PRIVATE ${_PROJECT_CONFIG_DIR}
)
target_link_libraries(
  os_main_126 PRIVATE Sqlite3OS
)
#<!-- /markdown-exec -->

The Listfile of Folder 'src'

#<!-- markdown-exec(cmd:cat cmake/GetSQLite3.cmake) -->#
# Brew Install SQLite3
set(_BREW_SQLITE_INCLUDE_DIR /usr/local/opt/sqlite3/include)
set(_BREW_SQLITE_LIBRARY /usr/local/opt/sqlite3/lib/libsqlite3.dylib)
# MacOS Default SQLite3
set(_OS_SQLITE_INCLUDE_DIR /usr/include)
set(_OS_SQLITE_LIBRARY /usr/lib/libsqlite3.dylib)

add_library(Sqlite3Brew SHARED IMPORTED)
set_target_properties(Sqlite3Brew
  PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES ${_BREW_SQLITE_INCLUDE_DIR}
  IMPORTED_LOCATION ${_BREW_SQLITE_LIBRARY}
)

add_library(Sqlite3OS SHARED IMPORTED)
set_target_properties(Sqlite3OS
  PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES ${_OS_SQLITE_INCLUDE_DIR}
  IMPORTED_LOCATION ${_OS_SQLITE_LIBRARY}
)
#<!-- /markdown-exec -->

The File 'GetSQLite3.cmake' of Folder 'cmake'

The Structure of Project

#<!-- markdown-exec(cmd:cat docs/output/tree.txt) -->#
.
├── cmake
│  ├── CMakeLists.txt
│  ├── config.h.in
│  ├── GetSQLite3.cmake
│  └── Initialize.cmake
├── CMakeLists.txt
├── config
│  └── config.hxx
└── src
   ├── CMakeLists.txt
   ├── main_brew.cxx
   └── main_os.cxx
#<!-- /markdown-exec -->

The Folder's Structure

The Process's Structure

_image

_image

Final Summary

感谢大家观看!

@Gitter: gitter.im/cnruby

@Github: github.com/cnruby

@Twitter: twitter.com/cnruby

@Blogspot: cnruby.blogspot.com

References

General

Important