最近研究了下cmake,總結了一些經常使用命令,方便之後快速查找。html
- 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 ...):
- 將庫文件連接到目標文件。
- 內置變量:
- 基礎目錄:
- 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:可執行文件存儲位置。
- 經常使用連接:
- cmake官方文檔