Я использую cmake-3.4.0 на Windows. У меня есть базовое понимание cmake. Я пытаюсь собрать два целевых исполняемых файла в папке с именем util\
. Я намерен скомпилировать два исходных файла util\celtenc.c
и util\celtdec.c
и связать два созданных объектных файла (celten c. c .obj и celtde c. c .obj) со stati * 1032. * lib: libcelt-0.0.0-sb-None-hexagon.a
и создайте две цели celt_Enc
и celt_Dec
.
Ниже моя util\CMakeLists.txt
. Я пробовал разные вещи, но не удалось построить две цели.
Случай 1] Когда я отключаю строку SET( CMAKE_C_FLAGS "" CACHE INTERNAL "")
Он берет мой CMAKE_C_FLAGS
набор в CMakeLists.txt верхнего уровня и выдает ошибку: linker option neglected
и исполняемый файл не создается, хотя создаются два соответствующих *. c .obj файла.
Случай 2] Поэтому, чтобы отключить / сбросить мой предыдущий CMAKE_C_FLAGS
, я добавляю оператор, как показано ниже:
SET( CMAKE_C_FLAGS "" CACHE INTERNAL "")
тогда он жалуется и выдает ошибку о недействительном namespec -l libcelt-0.0.0-sb-None-hexagon.a
Чего мне не хватает? Как я могу изменить этот CMakeLists.txt, чтобы скомпилировать два вышеупомянутых исходных файла *. c и связать их, чтобы получить две исполняемые цели?
if ("${TARGET_ARCH}" MATCHES "hexagon")
add_executable ( celt_Enc celtenc.c )
target_link_libraries(celt_Enc libcelt-0.0.0-sb-None-hexagon.a )
add_executable ( celt_Dec celtdec.c )
target_link_libraries(celt_Dec libcelt-0.0.0-sb-None-hexagon.a )
SET_TARGET_PROPERTIES( celt_Dec PROPERTIES CMAKE_EXE_LINKER_FLAGS "-v -L ..\ -llibcelt-0.0.0-sb-None-hexagon.a -lhexagon")
SET( CMAKE_C_FLAGS "" CACHE INTERNAL "")
#SET( CMAKE_EXE_LINKER_FLAGS "-mv66 -O3 -v " CACHE INTERNAL "")
else()
message( STATUS "Setting Non-Hexagon target link libraries." )
target_link_libraries ( celt_Enc ${CELT_SHARED_LIB_NAME} )
endif()
if(WIN32)
set_target_properties( celt_Enc PROPERTIES LINK_FLAGS "/INCREMENTAL:NO" )
set_target_properties( celt_Dec PROPERTIES LINK_FLAGS "/INCREMENTAL:NO" )
endif()