測試工程的目錄結構如下
+CMakeLists.txt
|
+--+ src/
| |
| +---- XX.c
| /---- CMakeLists.txt
+--+ libcommon/
| |
| +--- xxx.h
| +--- xxx.c
| /--- CMakeLists.txt
/-- + build
頂層CMakeLists
cmake_minimum_required(VERSION 2.8)
PROJECT(opengl-test C CXX) add_subdirectory(src) add_subdirectory(libcommon) |
add_subdirectory告訴cmake去子目錄尋找新的CMakeLists.txt
|
src 的CMakeLists
include_directories(${PROJECT_SOURCE_DIR}/libcommon)
SET(SRCS Simple_Texture2D.c Hello_Triangle.c ) ADD_DEFINITIONS("-DDEBUG") FOREACH(SRC ${SRCS}) get_filename_component(TARGET_NAME ${SRC} NAME_WE) ADD_EXECUTABLE(${TARGET_NAME} ${SRC}) TARGET_LINK_LIBRARIES(${TARGET_NAME} libcommon) ENDFOREACH(SRC) |
include_directories將給定的路徑添加到編譯器搜索包含文件的路徑列表中 PROJECT_SOURCE_DIR 指的是工程頂層目錄 ADD_DEFINITIONS 供設置-D..等編譯預處理需要的宏定義參數
foreach(loop_var arg1 arg2 ...) COMMAND1(ARGS ...) COMMAND2(ARGS ...) ... endforeach(loop_var)
get_filename_component(<VAR> FileName PATH|ABSOLUTE|NAME|EXT|NAME_WE|REALPATH [CACHE]) 將變量<VAR>設置爲路徑(PATH),文件名(NAME),文件擴展名(EXT),去掉擴展名的文件名(NAME_WE)
ADD_EXECUTABLE 生成TARGET_NAME爲名稱的可執行程序 TARGET_LINK_LIBRARIES 將libcommon 鏈接到 TARGET_NAME這個目標上 |
libcommon的CMakeLists
SET(LIB_SRC esUtil.c
esShapes.c esTransform.c esShader.c) add_library(libcommon ${LIB_SRC}) set_target_properties(libcommon PROPERTIES OUTPUT_NAME "common") TARGET_LINK_LIBRARIES(libcommon -lGLESv2 -lEGL -lm -lX11) |
本來生成的靜態庫是liblibcommoon.a 爲了生成的名稱libcommon.a set_target_properties 修改庫的輸出名稱爲 libcommon.a
add_library 生成一個庫,類似於add_executable
|