我是 CMake 新手,我正在尝试编译我的项目。该项目创建了一些静态库和一些可执行文件。
下面是我拥有的文件结构的示例。
PROJECT
主要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)
目前,通过这篇文章,我可以在 build/linux/out 文件夹中成功生成所需的库。我确实创建了发布和调试文件夹,并尝试构建相同的文件夹。这些文件是在相应的 RElease 或 Debug 文件夹中创建和构建的。
光盘发行
cmake -DCMAKE_BUILD_TYPE=发布 ..
make
问题:
1)由于该项目可以在 build/linux 级别以及 build/linux/Release build/linux/Debug 级别构建,有没有一种方法可以仅在基于 build/linux 级别编译该项目提供的发布或调试选项(此外,文件将根据指定的选项放置在调试或发布文件夹中)。
即我想做 cmake -DCMAKE_BUILD=Release 。在构建/Linux 级别而不是发布调试级别。
我确实尝试在 build/linux 级别使用以下选项运行
cmake -DCMAKE_BUILD_TYPE=调试
但我收到一条错误消息“指定了未知参数”。您能否让我知道如何设置此配置,以便稍后我可以将其集成到 Eclipse
2)我想根据指定的调试和版本设置每个项目的编译标志,我该怎么做?