나는 CMake를 사용하여 리눅스에서 C++ 프로젝트를 개발 중이다.CMake - 다른 대상에 대해 다른 디렉토리를 포함 하시겠습니까?
두 라이브러리, LibA
및 LibB
을 생성 중입니다. 내가 LibA
과 LibB
같은 포함 디렉토리를 갖고 싶지 않아요. LibA
에만 DirectoryA
을 포함하도록 설정하고 LibB
에만 DirectoryB
을 포함하도록 설정할 수있는 방법이 있습니까?
편집 :
모두LibA
및 LibB
이 실행, MyExe
에 사용됩니다. MyExe의 소스 코드에 #include
LibA.h
과 이 포함되어있을 경우 DirectoryA
과 DirectoryB
이 포함 된 헤더 파일을 MyExe
에 공존 시키면 이름 공간 충돌이 발생합니다.
이것이 가능합니까?
편집 2 : 여기에 내 CMakeLists.txt include_directories의가 (포함)이다
add_library(LibA src/LibA.cpp include/LibA.h)
set_property(TARGET LibA PROPERTY INCLUDE_DIRECTORIES /opt/SomeLibrary2.0/include/)
target_link_libraries(LibA /opt/SomeLibrary2.0/lib/a.so /opt/SomeLibrary2.0/lib/b.so /opt/SomeLibrary2.0/lib/c.so)
add_library(LibB src/LibB.cpp include/LibB.h)
set_property(TARGET LibB PROPERTY INCLUDE_DIRECTORIES ${LIB_B_INCLUDE_DIRS})
target_link_libraries(LibB ${LIB_B_LIBRARIES})
add_executable(MyExe src/myexe.cpp)
target_link_libraries(MyExe LibA LibB)
하지만 난 여전히 오류를 받고 있어요. LibA.h는 SomeLibrary의 헤더 파일을 찾을 수 없다고 말하고 있습니까?
하게 분할 CMake 파일을, 그들을 만들 하위 디렉토리. – IdeaHat
의견을 보내 주셔서 감사합니다. 원래 문제는 내 문제를보다 잘 반영하도록 업데이트되었습니다. – trianta2
'DirectoryA와 DirectoryB가 포함 된 헤더 파일을 MyExe에 공존시킬 수 없으므로 이름 공간 충돌이 발생합니다. IMHO 설계상의 문제입니다. 충돌을 포함하면 이상한 링커 오류와 예기치 않은 런타임 동작이 발생할 수 있습니다. –