====== CMake ======
[[https://cmake.org/Wiki/CMake_Useful_Variables]]
[[http://www.vtk.org/Wiki/CMake_Cross_Compiling#Setting_up_the_system_and_toolchain]]
==== verbose build ====
=== Method 1 ===
set(CMAKE_VERBOSE_MAKEFILE ON)
=== Method 2 ===
make VERBOSE=1
=== Method 3 ===
cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON $path_to_project_source
==== multiline strings ====
Use 2 space indentation
message(STATUS "This is a very long
message spanning on
several lines
")
==== add all *.c files ====
cmake_minimum_required(VERSION 2.8)
file(GLOB helloworld_SRC
"*.h"
"*.cpp"
)
add_executable(helloworld ${helloworld_SRC})
==== linker flags ====
Check:
* CMAKE_EXE_LINKER_FLAGS
* CMAKE_MODULE_LINKER_FLAGS
* CMAKE_SHARED_LINKER_FLAGS
* CMAKE_STATIC_LINKER_FLAGS
set (CMAKE_EXE_LINKER_FLAGS "-Wl,--unresolved-symbols=ignore-in-object-files")
==== debug build ====
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
==== libraries ====
add_executable(ws2812 ${COMMON_SOURCES} ${TARGET_SOURCES})
target_link_libraries(ws2812 rpi_ws281x)
set(RPI_WS281X_SOURCES
mailbox.c
ws2811.c
pwm.c
dma.c
rpihw.c
)
add_library(rpi_ws281x STATIC ${RPI_WS281X_SOURCES})
=== find_package vs find_library ===
* **find_package** Loads settings for external project. Try to configure all variables related to package (headers, paths)
* module: package_name.cmake (or shipped with CMake /usr/share/cmake/Modules/FindPackage_name.cmake)
* config: package_nameConfig.cmake or package_name-.cmake
* **find_library**
*