install 추가 질문
안녕하세요?
install 예제 코드를 약간 수정해서 응용해보고 싶습니다. 근데 이 내용을 챗봇들도 잘 몰라서 강사님께 문의드립니다.
baz 타겟을 새로 만들고, foo는 baz타겟을 private으로 의존합니다.
baz 타겟은 baz()를 제공하며 foo()와 동일하게 stdout 출력하는 코드입니다.
#include <baz.h>
foo()
{
cout << "I'm foo!" << endl;
baz(); // "I'm baz!"
}
baz는 foo 내부에서만 사용됩니다. 그래서 demo에는 기존 코드처럼 foo 타겟의 헤더만 제공합니다.
제 의도는 I'm foo에 이어 I'm baz도 같이 출력됐으면 했는데, 항상 I'm baz만 출력됩니다.
add_library(foo
foo.cpp
# baz.cpp
)챗봇은 foo 타겟 만들 때 baz.cpp도 추가하라고 합니다.
foo, baz 를 명시적으로 분리된 상태에서 CMakeLists.txt에서 작성하고, baz는 foo 내부에서만 사용되니 foo 타겟만 demo 노출해서 사용할 수 있는 방법이 있을까요?
답변 2
0
baz 타켓을 만듭니다. 그리고 baz.h와 baz.cpp를 포함시킵니다.
target_link_libraries로 baz를 foo에 PRIVATE으로 연결 시킵니다.
이렇게 하시면될 것 같은데 원하시는 방법이 맞으실까요?
0
add_library(baz src/baz.cpp)
target_include_directories(baz PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_link_libraries(foo PRIVATE baz)
...
install(TARGETS foo baz
...
)install(TARGETS ...)
에서 baz를 삭제하면
이런 에러가 나오는데요,
CMake Error: install(EXPORT "installing-config" ...) includes target 'foo'
which requires target 'baz' that is not in any export set.
다시 baz를 추가하면 잘 됩니다.
이 패키지(foo + baz) 사용자가 패키지를 포함해서 빌드하려면 foo.lib, baz.lib 모두 필요해서 이런 에러가 발생하는 것 같습니다..
install할 때 baz는 private 이고 foo만 public 이니까 baz.lib의 코드들이 foo.lib에 통합되고 foo.lib만 사용자에게 install 통해서 제공될 줄 알았습니다...ㅎㅎ
0
add_library(baz src/baz.cpp)
target_include_directories(baz PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_link_libraries(foo PRIVATE baz)
...
install(TARGETS foo baz
...
)
baz 타겟을 정의한 다음 install(TARGETS...) 에 baz 타겟을 추가했습니다.
이렇게 하니 install-prefix로 정의한 install 디렉터리 하위에 foo.lib, baz.lib이 생성됐고,
demo를 빌드할 때 baz.lib로 포함되서 실행파일이 만들어지는 것 같습니다. I'm baz 문구 정상적으로 출력됩니다.
이렇게 접근하는 게 맞나요?
0
네 맞습니다. 그리고 barz의 include는 public으로 해주셔야하고요 private은 내부에서 사용하는 헤더만 포함시켜야합니다.
또 install은 최종 실행파일만 하면 자동으로 설치가 될꺼에요. 이건 테스트 해보셔야합니다.
실행 방법 질문
0
68
1
CMake Error: Unknown argument --fresh
0
65
1
질문
0
53
2
set(<variable> ON/OFF)와 option에 차이가 있을까요?
0
63
2
-와 _를 선택하는 규칙이 궁금합니다.
0
70
2
4강과 5강의 강의 순서가 바뀐 것 같습니다.
0
67
2
-G 명령으로 Xcode 생성 할때 오류가 발생합니다.
0
154
2
Build_SHARED_LIBS 질문
0
151
2
수업 진행 중에 궁금한 부분이 생겼습니다.
0
185
2
설치경로 지정이 잘 안돼요.
0
153
1
FetchContent로 가져온 외부 라이브러리를 사전에 빌드하는 방법이 있을까요?
0
244
2
ExternalProject_Add 관련 질문
0
266
2
FetchContent를 캐시 처리할 수 있나요?
0
147
1
CMake 커맨드 - target_include_directories 질문
0
199
2
병렬 동작 지원 여부
1
267
2
CMake 의 단점들
0
237
1
CMake 출시 연도가 영상에서 아마도 잘못 소개된 것 같습니다
0
177
1
4-2 installing 에서 질문드립니다
0
228
2
CheckIncludeFileCXX 모듈 질문
0
193
1
혹시 강의에 나오는 예제 코드를 받을 수 있는건가요?
0
278
1
CMake 배포 강의가 CMake 설치 강의랑 똑같아요
0
485
1
Xcode 빌드시스템 에서 빌드가 잘 되지 않는 문제가 있습니다.
0
1273
1
CMake 심화 - CMake 설치 실습 관련 문제
0
767
3
CMakeCache.txt에서 ON과 1은 같은건가요?
0
311
1





