最近研究了下cmake,總結了一些常用命令,方便以后快速查找。
-
project(projectname [CXX] [C] [Java]):
- 設置工程名。
-
set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]):
- 設置變量VAR為指定值。
- 例子:set(CXX_FLAGS -g -Wall)。將變量CXX_FLAGS設置為"-g;-Wall"。其中以分號分隔。
-
include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...):
- 將dir1, dir2作為include搜索路徑。
-
find_package(
[major.minor] [QUIET] [NO_MODULE] [[REQUIRED|COMPONENTS] [components...]]): - 暫時不是很理解。
- 例子:find_package(Threads REQUIRED)
-
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL]):
- source_dir下的CmakeLists.txt也會被處理。
-
編譯鏈接動作:
- add_library(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN):
- 使用指定源文件生成庫文件。該庫文件會存儲於CMAKE_ARCHIVE_OUTPUT_DIRECTORY或者CMAKE_LIBRARY_OUTPUT_DIRECTORY指定的目錄。
- add_executable(exename [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN):
- 使用指定源文件生成可執行文件。會存儲於CMAKE_RUNTIME_OUTPUT_DIRECTORY指定的位置。
- target_link_libraries(target library1 <debug | optimized> library2 ...):
- 將庫文件鏈接到目標文件。
- add_library(libname [SHARED | STATIC | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN):
-
內置變量:
- 基礎目錄:
- PROJECT_SOURCE_DIR:執行cmake的目錄。比如我在/mnt/d/work/cpp/NanoSTL/build目錄下執行cmake ..,雖然根CMakelists.txt位於/mnt/d/work/cpp/NanoSTL,PROJECT_SOURCE_DIR的值還是/mnt/d/work/cpp/NanoSTL/build。
- PROJECT_BINARY_DIR:工程根目錄。比如根CMakelists.txt位於/mnt/d/work/cpp/NanoSTL,那么該變量就是/mnt/d/work/cpp/NanoSTL。
- CMAKE_CXX_FLAGS:編譯器選項。
- 輸出目錄:
- CMAKE_ARCHIVE_OUTPUT_DIRECTORY:編譯后.a文件存儲位置。
- CMAKE_LIBRARY_OUTPUT_DIRECTORY:動態鏈接文件.so存儲位置。
- CMAKE_RUNTIME_OUTPUT_DIRECTORY:可執行文件存儲位置。
- 基礎目錄:
-
常用鏈接: