소스 파일에 많은 소스 파일이 있습니다. 예를 들어 a.c, b.c, c.c 그리고 -combine 옵션으로 gcc로 컴파일하려고합니다.Cmake와 gcc가 결합합니다.
set(CMAKE_C_FLAGS "-combine")
set(SRC a.c b.c c.c)
add_executable(a.out ${SRC})
Cmake는 개체 파일의 각 * .c 파일을 컴파일하지만 모든 원본을 하나의 개체로 컴파일하려고합니다. 어떻게해야합니까? GCC의 측면에서
:
gcc -combine a.c b.c c.c -o module.o
ar rcs library.a module.o
하지만 cmake가 소스의 단위 모듈 번역을 사용합니다.
gcc a.c -o a.o
gcc b.c -o b.o
gcc c.c -o c.o
ar rcs library.a a.o b.o c.o
결합으로 번역하면 프로그램 성능이 향상 될 수 있습니다. gcc의 이전 버전 때문에 cmake에서 같은 문제를 해결할 수있는 LTO를 사용할 수 없습니다.
감사합니다.
'-combine' 옵션이 존재합니까? 나는 당신이하려고하는 것이 아니라는 느낌을 가지고 있습니다. 어쩌면'-fwhole-program'을 의미 할 것입니다. 이것은 도덕적으로 모든 소스 파일을 연결하는 것과 같습니다. 그러나 재사용 가능한 라이브러리를 만들려고 노력하는 것일 가능성이 더 큽니다. 동적 라이브러리를 만들기 위해'-shared'를 사용하거나'.o' 파일을 정적 라이브러리에 결합하기 위해'ar' 프로그램을 사용하십시오. CMake는 두 가지 모두를 자동화 할 수 있습니다. –
예, 확실합니다. 이 옵션은 gcc 버전 4.4/4.5에 존재합니다. –
흥미 롭다. 4.6에서 사라졌다. :-) 그 목적은 무엇입니까? '-fwhole-program'으로 얻을 수없는 것은 무엇입니까? –