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
: mingwmsvc
: windowslinux
: linux
Autotools
참고자료
Cmake 이전에 쓰이던 빌드 시스템
configure
이라는 실행 파일을 도입해서 빌드환경을 개발자 입맛에 맞게 구성하면 makefile
이 구성되게 되고 해당 makefile
파일로 빌드되는 구조
기본적으로 리눅스를 타겟으로 개발되었지만 MYS2를 환경을 타겟팅해서 윈도우용으로 배포 가능하게 되어 크로스 플랫폼 빌드에도 쓰인다
오해하면 안되는게 Autotools
자체가 하나의 프로그램이 아니며 autoconf
, automake
, autoscan
등을 사용한 빌드 시스템을 Autotools
이라고 한다
Makefile.am
파일 생성autoscan
실행, configure.scan → configure.ac로 이름 바꾸기configure.ac
수정aclocal
,autoheader
,autoconf
실행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-gccg++
: /usr/bin/x86_64-w64-mingw32-g++
-
홈 경로(기본 라이브러리 경로)
- /usr/x86_64-w64-mingw32`
윈도우 (x86)
패키지: mingw-w64
-
컴파일러
gcc
: /usr/bin/i686-w64-mingw32-gccg++
: /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-gccg++
: /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-gccg++
: /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-gccg++
: /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-gccg++
: /usr/bin/aarch64-linux-gnu-g++
-
홈 경로(기본 라이브러리 경로)
- aarch64-linux-gnueabihf