Вот мой сценарий CMake:
cmake_minimum_required(VERSION 2.8)
project(cimutils)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
# not recommended to search for all *.c (This sets all source in variable SOURCES)
#file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c")
# explicitly define each .c file is preferred. (This sets all source in variable SOURCES)
set(SOURCES
"src/process_picture/saveraw.c"
"src/process_picture/savebmp.c"
"src/process_picture/savejpeg.c"
"src/lcd/framebuffer.c"
"src/main.c"
"src/cim/video.c"
"src/cim/process.c"
"src/cim/convert.c"
"src/cim/cim_fmt.c"
)
# set include path in variable INC
set (INC
"src/include"
"src/jpeg_hw_encoder"
)
# Set include path
include_directories (AFTER ${INC})
# Set all source files
add_executable(${PROJECT_NAME} ${SOURCES})
# Sets default (system) library path
set (CMAKE_SYSROOT "/usr/local/mips-linux-gnu-gcc-toolchains/mips-gcc-glibc/mips-linux-gnu/libc")
find_library (jpeg
NAMES jpeg
PATHS "${CMAKE_SOURCE_DIR}/lib"
)
find_library (jpeg-hw
NAMES jpeg-hw
PATHS "${CMAKE_SOURCE_DIR}/lib"
)
target_link_libraries(${PROJECT_NAME} c gcc_s ${jpeg} ${jpeg-hw})
Сборка в порядке. Однако он относился к jpeg-hw и jpeg по-разному, поскольку я видел команду ссылки (фрагмент усечен, чтобы показать только соответствующие части):
gcc ..... ${PROJECT_HOME}/lib/libjpeg.so -ljpeg-hw
Судя по всему, эти две двоичные библиотеки были помещены в один и тот же каталог, и они используют один и тот же синтаксис в файле сценария. Но почему CMake выбирает полный путь для одного и использует -l для другого? Просто очень любопытно ....
Хорошая догадка. Постараюсь завтра разобраться. : D





Только предположение: CMake пробует короткие формы для библиотек (
-ljpegи-ljpeg-hw). Но он обнаруживает, что библиотекаjpegсуществует в каком-то другом каталоге, который ищет компоновщик. Чтобы избежать неоднозначности при поиске библиотекиjpeg, CMake решает использовать свой абсолютный путь для компоновщика. Поскольку в поиске библиотекиjpeg-hwнет двусмысленности, CMake оставляет свое короткое имя.