2011-12-08 36 views
0

假设我的项目有几个子模块,并且该架构是:如何通过CMakeLists母亲建立一个项目?

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

我可以做一个单一CMakeLists加入很多消息来源,但我认为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的母亲,而不是像现在这样在模块中。

回答

0

所以,你只是想要所有的CMake代码驻留在根CMakeLists.txt?没问题。

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

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

+0

但是,我如何编译根CMakeLists.txt中的代码? –

+0

用显式路径替换'$ {CMAKE_CURRENT_SOURCE_DIR}'的所有用法。 – arrowd

+0

但我需要在模块路径中定义源代码,并将这些变量恢复回根CMakeLists.txt并进行编译。 –

相关问题