私はCMakeが初めてで、プロジェクトをコンパイルしようとしています。このプロジェクトは、いくつかの静的ライブラリといくつかの実行可能ファイルを作成します。
以下は、私が持っているファイル構造の例です。
事業
ビルド/Linux
- CMakeLists.txt (メインの CMakelist ファイル)
build/linux/Release (リリース ライブラリとファイルが含まれている必要があります)
build/linux/Debug (ファイルのデバッグ バージョンが含まれている必要があります)
SRC
- subProject_1
.cpp (すべてのソース ファイル) およびこのフォルダーの CMakeLists.txt 1 (静的ライブラリの作成) - subproject_2
.cpp (すべてのソース ファイル) およびこのフォルダーの CMakeLists.txt 2 (静的ライブラリの作成) - subproject_3
.cpp (すべてのソース ファイル) およびこのフォルダーの CMakeLists.txt 3 (実行可能ファイルの作成)
- subProject_1
含む
- subProject_1
.h (すべてのヘッダー ファイル) - subProject_2
.h (すべてのヘッダー ファイル) - subProject_3
.h (すべてのヘッダー ファイル)
- subProject_1
メイン 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 フォルダーを作成し、同じものをビルドしようとしました。ファイルは、それぞれの RElease または Debug フォルダーに作成およびビルドされます。CDリリース
cmake -DCMAKE_BUILD_TYPE=リリース ..
作る
質問: 1) プロジェクトはビルド/Linux レベルとビルド/Linux/リリース ビルド/Linux/デバッグ レベルの両方でビルドできるため、ビルド/Linux でのみプロジェクトをコンパイルできる方法はありますか?提供されたリリースまたはデバッグ オプションに基づくレベル (さらに、指定されたオプションに基づいて、ファイルはデバッグまたはリリース フォルダーに配置されます)。
つまり、 cmake -DCMAKE_BUILD=Release を実行したいと思います。リリース デバッグ レベルではなく、ビルド/Linux レベルで。
ビルド/Linuxレベルで以下のオプションで実行しようとしました
cmake -DCMAKE_BUILD_TYPE=デバッグ
しかし、エラーメッセージ Unknown argument specified が表示されました。後で同じものをEclipseに統合できるように、この構成をセットアップする方法を教えてください
2) 指定したデバッグとバージョンに基づいて各プロジェクトのコンパイル フラグを設定したいのですが、どうすればよいですか?