cmake_minimum_required(VERSION 3.5) project(hello_library) ############################################################ # Create a library ############################################################ #Generate the shared library from the library sources add_library(hello_library SHARED src/Hello.cpp ) add_library(hello::library ALIAS hello_library) target_include_directories(hello_library PUBLIC ${PROJECT_SOURCE_DIR}/include ) ############################################################ # Create an executable ############################################################ # Add an executable with the above sources add_executable(hello_binary src/main.cpp ) # link the new hello_library target with the hello_binary target target_link_libraries( hello_binary PRIVATE hello::library )
*
add_library(hello_library SHARED
src/Hello.cpp
)
- SHARED must be upper case, and mark to generate a shared library.
Please note that, SHARED, do not miss the D here.
*
add_library(hello::library ALIAS hello_library)
- ALIAS , upper case only, just like "typedef".
hello::library is the same as hello_library now. They are 2 names of the same thing.
And please note that "hello::library" is just a name !!! NO namespace in CMake!!!!
*
target_link_libraries( hello_binary
PRIVATE
hello::library
)
- PRIVATE marks the linked files only avaliable in this scope.
In other words, within this subproject or the folder where this CMakeList.txt is.