繁体   English   中英

如何通过CMakeLists母亲构建项目?

[英]How to build a project through CMakeLists mother?

假设我的项目有几个子模块,其架构为:

  • /CMakeLists.txt( ) - >呼叫子目录
  • /projectName/CMakeLists.txt( 儿童 ) - >通话子目录MODULENAME并添加主要项目来源
  • /projectName/xxx.cpp
  • /projectName/moduleName/CMakeLists.txt(Child of Child)->添加模块源
  • /projectName/moduleName/xxx.cpp

我可以通过添加多个源的单个CMakeList来做,但是我认为CMake已经以这种方式工作了。

我的CMakeLists.txt:

主要的CMakeLists.txt:

# CMake Minimum Version Required ( >= 2.8 )
cmake_minimum_required ( VERSION 2.8 )

# CMake Project Name and Languages
project ( LightUpdater C CXX )

# Add Compiler Definitions
add_definitions ( -Wall -Werror )

# Include source headers
include_directories ( lightupdater )

# Add custom module folder
set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}" )
set ( EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} ) # Binary output folder

# Setup project variables
set ( LIGHTUPDATER_OUTPUT lightupdater )
set ( LIGHTUPDATER_SOURCES "" )

# Add Source Subdirectory
add_subdirectory ( lightupdater )

/projectName/CMakeLists.txt

# Setup the source code files
list ( APPEND LIGHTUPDATER_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lightupdater.cpp )

# Add Modules
add_subdirectory ( interface )

/projectName/moduleName/CMakeLists.txt

list ( APPEND LIGHTUPDATER_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/gui.cpp )

# Qt4
# ----------------------------------------------------------------------------------
# Find Qt4 (REQUIRED)
find_package( Qt4 REQUIRED )
# Compiler setup
include ( ${QT_USE_FILE} )
add_definitions ( ${QT_DEFINITIONS} )
include_directories( ${QT_INCLUDE_DIR} )

# Setup the interface sources
set( INTERFACE_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/gui.hpp )

# Process headers
QT4_WRAP_CPP( INTERFACE_HEADER_MOC ${INTERFACE_HEADER} )
list( APPEND LIGHTUPDATER_SOURCES ${INTERFACE_HEADER_MOC} )
# ----------------------------------------------------------------------------------
# Define Qt Operating System
# Created by Renato Utsch
# ----------------------------------------------------------------------------------
set( GUI_TYPE "" )
if( APPLE )
    set( GUI_TYPE MACOSX_BUNDLE )
elseif( WIN32 )
    set( GUI_TYPE WIN32 )
endif()

# Compiler call
add_executable( ${LIGHTUPDATER_OUTPUT} ${GUI_TYPE} ${LIGHTUPDATER_SOURCES} )
# Linking the 3rd party librarys
target_link_libraries( ${LIGHTUPDATER_OUTPUT} ${QT_LIBRARIES} )

我希望调用过程发生在编译器CMakeLists.txt的母亲中,而不是在今天的模块中发生。

因此,您只希望所有CMake代码都驻留在根CMakeLists.txt中? 没问题。

在根CMakeLists.txt中,将add_subdirectory()替换${CMAKE_CURRENT_SOURCE_DIR}/lightupdater.cpp projectName/CMakeLists.txt ,并将${CMAKE_CURRENT_SOURCE_DIR}/lightupdater.cpp替换${CMAKE_CURRENT_SOURCE_DIR}/lightupdater.cpp lightupdater/lightupdater.cpp

最后,以相同的方式重写/projectName/moduleName/CMakeLists.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM