소스 검색

Merge pull request #207 from miyanyan/add-cmake-install

Add cmake install
BLUELOVETH 2 년 전
부모
커밋
fe489cf329
3개의 변경된 파일60개의 추가작업 그리고 4개의 파일을 삭제
  1. 1 1
      3rd/cjson/CMakeLists.txt
  2. 31 3
      CMakeLists.txt
  3. 28 0
      run_cmake_install_test.sh

+ 1 - 1
3rd/cjson/CMakeLists.txt

@@ -6,7 +6,7 @@ set(CMAKE_C_STANDARD 11)
 set(CMAKE_CXX_STANDARD 17)
 
 include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
-include_directories(${CMAKE_CURRENT_LIST_DIR}/../pocketpy/include)
+include_directories(${CMAKE_CURRENT_LIST_DIR}/../../include)
 
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
 

+ 31 - 3
CMakeLists.txt

@@ -16,8 +16,6 @@ else()
     endif()
 endif()
 
-include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
-
 aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC)
 
 option(PK_USE_CJSON "" OFF)
@@ -60,6 +58,36 @@ else()
     target_link_libraries(${PROJECT_EXE_NAME} ${CMAKE_DL_LIBS})
 endif()
 
+target_include_directories(${PROJECT_NAME} PUBLIC 
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
+    $<INSTALL_INTERFACE:include>
+)
+
 if(PK_USE_CJSON)
-    target_link_libraries(${PROJECT_NAME} cjson)
+    target_link_libraries(${PROJECT_NAME} PRIVATE $<BUILD_INTERFACE:cjson>)
+endif()
+
+option(PK_INSTALL "Generate the install target" ON)
+if (PK_INSTALL)
+    install(
+        TARGETS ${PROJECT_NAME}
+        EXPORT ${PROJECT_NAME}_target
+        ARCHIVE DESTINATION lib
+        LIBRARY DESTINATION lib
+        RUNTIME DESTINATION bin
+    )
+
+    install(
+        DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ 
+        DESTINATION include 
+        FILES_MATCHING PATTERN "*.h"
+        PATTERN "typings" EXCLUDE
+    )
+    
+    # generate config.cmake
+    install(
+        EXPORT ${PROJECT_NAME}_target
+        FILE ${PROJECT_NAME}-config.cmake
+        DESTINATION "share/${PROJECT_NAME}"
+    )
 endif()

+ 28 - 0
run_cmake_install_test.sh

@@ -0,0 +1,28 @@
+rm -rf install
+mkdir -p install/build
+cd install/build
+cmake ../../ -DCMAKE_INSTALL_PREFIX=../pocketpy -DPK_USE_CJSON=ON -DPK_ENABLE_OS=ON
+cmake --build . --target install --config Release -j 8
+
+if [ -e "../pocketpy/lib/libpocketpy.so" ]; then
+    echo "Library installed successfully."
+else
+    echo "Library installation failed."
+    exit 1
+fi
+
+if [ -e "../pocketpy/include/pocketpy.h" ]; then
+    echo "Header files installed successfully."
+else
+    echo "Header files installation failed."
+    exit 1
+fi
+
+if [ -e "../pocketpy/share/pocketpy/pocketpy-config.cmake" ]; then
+    echo "Config file installed successfully."
+else
+    echo "Config file installation failed."
+    exit 1
+fi
+
+echo "CMake install verified successfully."