- 1> 盡量使用外部build而不是內部build.
所謂的內外,指的是make目錄和CMakeLists.txt不在一個目錄下。
好處是,所有的臨時文件都會生成在當前運行cmake/make的目錄。
譬如在項目根目錄有一個CMakeLists.txt作為top-level file, 幾個代碼子目錄,一個build目錄,可以用:
cd build
cmake ..
make
此時中間文件不會污染項目的目錄結構。
set(libname "mylib")

add_library(libname_static STATIC src1 src2)
set_target_properties(libname_static OUTPUT_NAME ${libname})
add_library(libname SHARED src1 src2)
- 3> 如何獲取當前運行目錄(working directory):可以在根目錄設置一個project_dir變量,設置為源代碼目錄,如下
set(project_top_dir ${CMAKE_CURRENT_SOURCE_DIR}/")
add_subdirectory(sub1)
add_subdirectory(sub2)
此時,各個子目錄中可以應用project_top_dir.
4> 處理跨平臺的第三方庫:假設第三方庫不是由CMake編譯得來,但要檢測依賴和變動,則可以用imported屬性:
add_library(ssllib SHARED IMPORTED)
add_library(cryptolib SHARED IMPORTED)
#May have different dependent libraries
set(libsuffix ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR})
set_target_properties(ssllib PROPERTIES IMPORTED_LOCATION "${project_top_dir}contrib/openssl/lib/libssl-${libsuffix}.so")
set_target_properties(cryptolib PROPERTIES IMPORTED_LOCATION "${project_top_dir}contrib/openssl/lib/libcrypto-${libsuffix}.so")
........................
#other CMakeLists.txt
add_executable(myExe src1 src2)
target_link_libraries(myExe ssllib cryptolib)