플랫폼 특정 코드를 조건부로 컴파일 한 후 multiple definition
링크 오류가 발생합니다.CMake로 링크 오류 받기
: 내가 운영 체제를 감지하고 정의하기 위해 CMake에서 자기 반성을 설정
#if defined(LIBRARY_PLATFORM_LINUX)
#include "native/impl.linux.c"
#elsif defined(LIBRARY_PLATFORM_WIN32)
#include "native/impl.win32.c"
#endif
다음 general.c
파일의 상단에
/
|__+ include/
| |__+ native/
| | |__ impl.h
| |
| |__ general.h
|
|__+ src/
|__+ native/
| |__ impl.linux.c
| |__ impl.win32.c
|
|__ general.c
상응하는 상수. 문제는, 나는 모든 디렉토리에 하나 개 CMakeLists.txt
파일을 유지하고 싶지 않았다, 그래서 나는 단순히 모든 .c
파일을 as suggested in this answer을 globbed :
file(GLOB_RECURSE LIBRARY_SOURCE_FILES "${PROJECT_SOURCE_DIR}/src/*.c")
분명히,이 문제를 일으키는 것입니다. 코드 #include
d를 general.c
에 컴파일하고 개별 파일 src/native/impl.*.c
을 컴파일하는 것으로 보입니다.
CMakeFiles/lib.dir/src/native/impl.linux.c.o: In function `declared_in_impl_h':
impl.linux.c:(.text+0x0): multiple definition of `declared_in_impl_h'
CMakeFiles/lib.dir/src/general.c.o:general.c:(.text+0x0): first defined here
어떻게 이런 상황을 풀 수 있습니까?
'impl. *'파일에 다른 확장자를 사용하십시오. –