C / C++ 용 패키지 관리자

GCC 다운로드: https://github.com/niXman/mingw-builds-binaries/releases

Cmke 란: https://cho001.tistory.com/229

대충 Cmke가 프로젝트 메니져인거고 vcpkg가 패키지 관리자이고

C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg

https://cmake.org/cmake/help/latest/

Mingw-w64

  • i686-w64-mingw32-gcc: 32비트
  • x86_64-w64-mingw32-gcc 64비트

패키지 설치

vcpkg new --application
# json으로 관리 안할때
vcpkg install libuv

# json으로 관리할때
vcpkg add port libuv
{
    "version": 8,
    "configurePresets": [
        {
            "name": "GCC-Base",
            "displayName": "GCC 14.2.0 x86_64-w64-mingw32",
            "generator": "MinGW Makefiles",
            "binaryDir": "${sourceDir}/build/${presetName}",
            "cacheVariables": {
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/build/install/${presetName}",
                "CMAKE_C_COMPILER": "C:/Program Files/mingw64/bin/gcc.exe",
                "CMAKE_CXX_COMPILER": "C:/Program Files/mingw64/bin/g++.exe",
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_TOOLCHAIN_FILE": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/vcpkg/scripts/buildsystems/vcpkg.cmake"
            }
        }
    ]
}
# vcpkg 패키지 경로 설정
set(CMAKE_PREFIX_PATH "vcpkg_installed/vcpkg/pkgs/libuv_x64-windows/share/libuv")
 
# build\Debug-Mingw-x64\vcpkg_installed\x64-mingw-static\share\<라이브러리 \usage 에서 적용법 확인 가능
find_package(libuv CONFIG REQUIRED)
target_link_libraries(K-WarningBypass PRIVATE libuv::uv)
add_library(ParseHttp STATIC lib/ParseHttp.c)
target_link_libraries(K-WarningBypass PRIVATE ParseHttp)
"CMAKE_FIND_ROOT_PATH_MODE_LIBRARY": "ONLY",
"CMAKE_FIND_ROOT_PATH_MODE_INCLUDE": "ONLY",
"CMAKE_FIND_ROOT_PATH_MODE_PACKAGE": "ONLY",

빌드

빌드 make는 윈도우에 경우 mingw32-make를 사용함
Visual Studio프로젝트로 받아보려면 -G "Visual Studio 17 2022" 이런식으로 빌드 생성기를 수정

vcpkg를 사용한 빌드

동적 라이브러리

CMakeLists.txt

find_package(libuv CONFIG REQUIRED)
target_link_libraries(K-WarningBypass PRIVATE libuv::uv)

정적 라이브러리

CMakeLists.txt

find_package(libuv CONFIG REQUIRED)
target_link_libraries(K-WarningBypass PRIVATE libuv::uv_a)

CMakePresets.json

...
"cacheVariables": {
	// 옵션 -DVCPKG_TARGET_TRIPLET=x64-<플렛폼>-static
	"VCPKG_TARGET_TRIPLET": "x64-<플렛폼>-static"
}
  • 플렛폼:
    • mingw-w64: mingw
    • msvc: windows
    • linux: linux

Autotools

참고자료

Cmake 이전에 쓰이던 빌드 시스템
configure 이라는 실행 파일을 도입해서 빌드환경을 개발자 입맛에 맞게 구성하면 makefile이 구성되게 되고 해당 makefile 파일로 빌드되는 구조

기본적으로 리눅스를 타겟으로 개발되었지만 MYS2를 환경을 타겟팅해서 윈도우용으로 배포 가능하게 되어 크로스 플랫폼 빌드에도 쓰인다

오해하면 안되는게 Autotools 자체가 하나의 프로그램이 아니며 autoconf, automake, autoscan 등을 사용한 빌드 시스템을 Autotools 이라고 한다

  1. Makefile.am 파일 생성
  2. autoscan 실행, configure.scan  configure.ac로 이름 바꾸기
  3. configure.ac 수정
  4. aclocal, autoheader, autoconf 실행
  5. automake 실행

이 과정을 끝내면 최종적으로 configure 실행파일이 생성됨

빌드 과정

./configure
make
make install

리눅스

-DCMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake"

GCC 리눅스 크로스 컴파일

참고로 본인이 속한 아키텍쳐는 그냥 gcc, g++ 패키지로 설치해서 써야함 홈 경로도 딱히 건들 필요 없고

그리고 윈도우 arm은 gcc로 컴파일 불가 하고 llvm 써야함

윈도우 (x64)

패키지: mingw-w64

  • 컴파일러

    • gcc: /usr/bin/x86_64-w64-mingw32-gcc
    • g++: /usr/bin/x86_64-w64-mingw32-g++
  • 홈 경로(기본 라이브러리 경로)

    • /usr/x86_64-w64-mingw32`

윈도우 (x86)

패키지: mingw-w64

  • 컴파일러

    • gcc: /usr/bin/i686-w64-mingw32-gcc
    • g++: /usr/bin/i686-w64-mingw32-g++
  • 홈 경로(기본 라이브러리 경로)

    • /usr/i686-w64-mingw32-gcc

리눅스 (x64)

패키지: gcc-x86-64-linux-gnu, g++-x86-64-linux-gnu

  • 컴파일러

    • gcc: /usr/bin/x86_64-linux-gnu-gcc
    • g++: /usr/bin/x86_64-linux-gnu-g++
  • 홈 경로(기본 라이브러리 경로)

    • /usr/x86_64-linux-gnu

리눅스 (x86)

패키지: gcc-i686-linux-gnu, g++-i686-linux-gnu

  • 컴파일러

    • gcc: /usr/bin/i686-linux-gnu-gcc
    • g++: /usr/bin/i686-linux-gnu-g++
  • 홈 경로(기본 라이브러리 경로)

    • /usr/i686-linux-gnu

리눅스 (arm)

패키지: gcc-arm-linux-gnueabihf, g++-arm-linux-gnueabihf

  • 컴파일러

    • gcc: /usr/bin/arm-linux-gnueabihf-gcc
    • g++: /usr/bin/arm-linux-gnueabihf-g++
  • 홈 경로(기본 라이브러리 경로)

    • /usr/arm-linux-gnueabihf

리눅스 (arm64)

패키지: gcc-aarch64-linux-gnu, g++-aarch64-linux-gnu

  • 컴파일러

    • gcc: /usr/bin/aarch64-linux-gnu-gcc
    • g++: /usr/bin/aarch64-linux-gnu-g++
  • 홈 경로(기본 라이브러리 경로)

    • aarch64-linux-gnueabihf