2017-12-27 26 views
3
add_library(target1 funtion.c target1.c) 
add_library(target2 funtion.c target2.c) 
add_executable(main.out main.c) 
target_link_libraries(main.out target1 target2 ${LDFLAGS}) 

여기 내 CMakeLists.txt입니다.CMake : 여러 대상이 같은 소스 파일을 사용합니다.

두 대상 모두 소스 파일 function.c을 사용해야합니다. 그것은 실행할 수 있습니다. 내 관심사는 아마도 CMakeList.txt을 작성하는 데 좋은 행동이 아니겠습니까?

답변

0

동일한 소스 파일을 여러 번 사용하는 것이 좋습니다. 서로 다른 프리 프로세서/컴파일러 플래그를 사용하여 같은 소스를 컴파일하려는 경우가 종종 있습니다.

하지만 당신은 컴파일 시간에 관심을하는 경우, 당신은 할 수 :

  • 이동 funtion.c 정적 라이브러리와 링크 target1과에 대한 target2 라이브러리를 분리합니다.
  • function.cobject library을 사용하고 출력 개체 파일을 target1target2에 보관하십시오.
+0

둘 다 function.c를 사용하는 main.out 링크 targe1 및 target2에 중복되는 심볼이 발생합니까? – user60627

+0

예, 심볼 중복이 발생합니다. 그런 다음 첫 번째 옵션 ('function.c '을 이동하여 라이브러리를 분리하고'target1'과'target2'을 연결)을 사용하는 것이 좋습니다. CMake는'function'이'main.out'에 한 번만 연결된다는 것에주의를 기울일 것입니다. – ivaigult

0

은 어느 쪽이든 당신은 충분히 당신의 질문 정보 또는 main.out와 함께 연결됩니다 때 중복 기호가 있기 때문에 function.ctarget1에와 target2이 작동하지 않습니다 추가를 부여하지 않았습니다.

function.c이 다른 컴파일 플래그로 작성 되었기 때문에 중복 된 기호가 없다고 확신하는 경우 예제가 정확합니다.