2012-11-09 61 views
2

我是新來的CMake,我想讓我的項目編譯。該項目創建了一些靜態庫和一些可執行文件。CMake設置發佈和調試版本和標誌

下面是我有的文件結構的例子。

項目

  • 編譯/ Linux的

    1. 的CMakeLists.txt(主要CMakelist文件)
  • 編譯/ Linux的/釋放(應包含發行庫和文件)

  • build/linux/Debug (應包含文件的調試版本)

  • SRC

    1. subProject_1
      的.cpp(所有源文件)和1的CMakeLists.txt這個文件夾(創建靜態庫)
    2. subproject_2
      的.cpp(所有源文件)和2的CMakeLists.txt此文件夾(創建靜態庫)
    3. subproject_3
      的.cpp(所有源文件)和的CMakeLists.txt 3 THI S(創建可執行文件)
  • 包括

    1. subProject_1
      .H(所有頭文件)
    2. subProject_2
      .H(所有頭文件)
    3. subProject_3文件夾
      .h(全部頭文件)

主要的CMakeLists.txt爲日誌目錄

cmake_minimum_required(VERSION 2.6) 
SET(CMAKE_CXX_COMPILER "g++") 
Project(ort) 

#set the source and header directories location 
set(ORT_HEADER_DIRECTORY "../../include") #include folder structure explained above 
set(ORT_SOURCE_DIRECTORY "../../src") 
set(ORT_BINARY_DIRECTORY "../../lib") # lib folder to contain all the libraries 

set (CMAKE_CURRENT_BINARY_DIR ".") 

#Include the library packages 
include_directories("/usr/include/wx-2.8") 
include_directories("/usr/local/cuda/include") and so on 


#set the names of all the projects (for creating the libraries) 
SET(PROJECT_NAMES "log" "data" "cc") 

foreach(PROJECT_NAME ${PROJECT_NAMES}) 
    # Create the cmake related files in the out folder so that the libraries can be 
    # copied to the lib folder 
    add_subdirectory("{ORT_SOURCE_DIRECTORY}/${PROJECT_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/out/${PROJECT_NAME}" 

endforeach(PROJECT_NAME ${PROJECT_NAMES}) 

#set the names of all the projects (for creating the libraries) 
SET(EXECUATALE_PROJECTS "metadata") 

foreach(EXECUATALE_PROJECT ${EXECUATALE_PROJECTS}) 
    # Create the cmake related files in the out folder so that the libraries can be 
    # copied to the lib folder 
    add_subdirectory("{ORT_SOURCE_DIRECTORY}/${EXECUATALE_PROJECT}" "${CMAKE_CURRENT_BINARY_DIR}/out/${EXECUATALE_PROJECT}" 

endforeach(EXECUATALE_PROJECT ${EXECUATALE_PROJECTS}) 

的CMakeLists.txt文件(我已經使用CC和數據項目中的相同邏輯)

SET (CMAKE_CXX_FLAGS " -g -Wall -pThread") 
include_directories(${ORT_HEADER_DIRECTORY}) 
SET(LOG_SOURCE a.cpp b.cpp c.cpp) 
ADD_LIBRARY(log_d ${LOG_SOURCE}) 
target_link)libraries(log_d cc_d data_d) 

元數據的CMakeLists.txt文件(創建可執行項目)

SET (CMAKE_CXX_FLAGS " -g -Wall -pThread") 
FIND_PACKAGE(wxWidgets) 
IF(wxWidgets_FOUND) 
     INCLUDE(${wxWidgets_USE_FILE}) 
ENDIF(wxWidgets_FOUND) 

Include_Directories(${wxWidgets_INCLUDE_DIRS}) 
include_directories(${ORT_HEADER_DIRECTORY}) 
include_directories("/usr/ort/lib/unixODBC/include") 

SET(META_SOURCE meta.cpp data.cpp) 

ADD_EXECUTABLE(meta_d ${META_SOURCE }) 
TARGET_LINK_LIBRARIES(meta_d log_d data_d) 

目前這件作品可以s在build/linux/out文件夾中成功生成所需的庫。我確實創建了發佈和調試文件夾,並嘗試構建相同的文件夾。這些文件被創建並建立在相應的RElease或Debug文件夾中。 cd版本

cmake -DCMAKE_BUILD_TYPE = Release ..

使

問題: 1)由於,該項目可以在編譯/ linux下一級建造既以及構建/ LINUX /發佈版本/ LINUX /調試級別,有沒有一種方法,通過該項目只能根據所提供的發行版或調試選項在build/linux級別編譯(另外,這些文件將根據指定的選項放置在調試版或發行版文件夾中)。

即我想做cmake -DCMAKE_BUILD =發佈。在構建/ linux級別而不是版本調試級別。

我曾嘗試與構建/ Linux的水平

cmake的-DCMAKE_BUILD_TYPE =調試

下面的選項運行,但我得到了指定的錯誤消息未知參數。你可以讓我知道如何設置這個配置,以便以後我可以將其集成到Eclipse中

2)我想根據指定的調試和版本爲每個項目設置編譯標誌,如何我可以這樣做嗎?

回答

2

CMakeLists.txt屬於源目錄,而不是構建目錄。在第一次執行build目錄中的cmake之前,它應該是空的。 你不應該並行線程直接鏈接,但用下面的方法:

find_package(Threads) 
target_link_libraries(proyectA lib1 lib2 ... ${CMAKE_THREAD_LIBS_INIT}) 

1)據我所知,您可以使用任何目錄,但只能有一個在每個目錄/ cmake的執行型身材。

您應該意識到使用CMAKE_BUILD_TYPE = Debug會自動向構建添加調試標誌,因此'-g'參數是多餘的。

另外,您可能應該使用set(CMAKE_CXX_FLAGS「$ {CMAKE_CXX_FLAGS} -Wall」)來不取消cmake用於gcc的默認參數。

2)Cmake有一個變量,每個構建類型都有默認參數。你可以添加你自己的每個。 例如這樣的事情可以做的伎倆:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall") 

有關詳細信息,請參閱本post

+1

'在每個目錄/ cmake execution中只能有一種構建類型''Xcode'和'MS Visual Studio'不適用 – 2013-12-20 16:22:32

相關問題