嵌套CMake模板

68 阅读1分钟

目录结构

Througput
├── CMakeLists.txt
├── CPP_Throughput_Data
│   ├── CMakeLists.txt
├── CPP_Throughput_Pub
│   ├── CMakeLists.txt
├── CPP_Throughput_Sub
│__ ├── CMakeLists.txt

外层

cmake_minimum_required(VERSION 3.0)

set(PARENT_NAME Throughput)

set(LIB_NAME CPP_${PARENT_NAME}_Data)
set(PUB_NAME CPP_${PARENT_NAME}_Pub)
set(SUB_NAME CPP_${PARENT_NAME}_Sub)

add_subdirectory(${LIB_NAME})
add_subdirectory(${PUB_NAME})
add_subdirectory(${SUB_NAME})

静态库

cmake_minimum_required(VERSION 3.0)

set (PROJECT_NAME ${LIB_NAME})

project(${PROJECT_NAME})

if(NOT DEFINED ENV{RTSB_HOME})
    message(FATAL_ERROR "NOT DEFINED RTSB_HOME ENV VARIABLES")
endif()
set(CMAKE_BUILD_TYPE $ENV{BUILD_TARGET})
set(CMAKE_CXX_STANDARD 11)

include_directories(
	${CMAKE_CURRENT_SOURCE_DIR}/../../generated
	$ENV{RTSB_HOME}/C++/CPPI
	$ENV{RTSB_HOME}/OS/include
	$ENV{RTSB_HOME}/DB/include
	$ENV{RTSB_HOME}/KN/include
	$ENV{RTSB_HOME}/UI/include
)

file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../../generated/*.cpp)
file(GLOB_RECURSE HEAD_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../../generated/*.h)

set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../lib/$ENV{BUILD_TARGET})

link_directories($ENV{RTSB_HOME}/lib/$ENV{BUILD_TARGET}/$ENV{OSNAME}/$ENV{OS_DIST_NAME}/$ENV{OSARCH}/$ENV{OS_VERSION})

add_library(${PROJECT_NAME} STATIC ${SRC_LIST} ${HEAD_LIST})

target_link_libraries(${PROJECT_NAME}
	OS
	KN
	CPPI
)

execute_process(
	COMMAND idlpp -I "$ENV{RTSB_HOME}/etc/idl" -l cpp -d ${CMAKE_CURRENT_SOURCE_DIR}/../../generated ${CMAKE_CURRENT_SOURCE_DIR}/../../../idl/${PARENT_NAME}.idl
)

应用程序

cmake_minimum_required(VERSION 3.0)

set (PROJECT_NAME ${PUB_NAME})

project(${PROJECT_NAME})

if(NOT DEFINED ENV{RTSB_HOME})
    message(FATAL_ERROR "NOT DEFINED RTSB_HOME ENV VARIABLES")
endif()
set(CMAKE_BUILD_TYPE $ENV{BUILD_TARGET})
set(CMAKE_CXX_STANDARD 11)

include_directories(
	${CMAKE_CURRENT_SOURCE_DIR}/../../src
	${CMAKE_CURRENT_SOURCE_DIR}/../../generated
	$ENV{RTSB_HOME}/C++/CPPI
	$ENV{RTSB_HOME}/OS/include
	$ENV{RTSB_HOME}/DB/include
	$ENV{RTSB_HOME}/KN/include
	$ENV{RTSB_HOME}/UI/include
)

set(SRC_LIST 
	${CMAKE_CURRENT_SOURCE_DIR}/../../src/implementation.cpp
	${CMAKE_CURRENT_SOURCE_DIR}/../../src/entities.cpp
	${CMAKE_CURRENT_SOURCE_DIR}/../../src/publisher.cpp
)

file(GLOB HEAD_LIST ${CMAKE_CURRENT_SOURCE_DIR}/../../src/*.h)


set(EXECUTABLE_OUTPUT_PATH
	${CMAKE_CURRENT_SOURCE_DIR}/../../bin/$ENV{BUILD_TARGET}/$ENV{OSNAME}/$ENV{OS_DIST_NAME}/$ENV{OSARCH}/$ENV{OS_VERSION}
)


link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../lib/$ENV{BUILD_TARGET})

link_directories($ENV{RTSB_HOME}/lib/$ENV{BUILD_TARGET}//$ENV{OSNAME}/$ENV{OS_DIST_NAME}/$ENV{OSARCH}/$ENV{OS_VERSION})

add_executable(${PROJECT_NAME} ${SRC_LIST} ${HEAD_LIST})

target_link_libraries(${PROJECT_NAME}
	${LIB_NAME}
	OS
	KN
	CPPI
)