TMS320F28379D: cmake搭建的交叉编译工程报错

Part Number: TMS320F28379D

1.我在ccs ide中编译通过了一个工程,编译通过能上版正常运行。我尝试使用cmake搭建一个工程,但发现链接阶段报错:

<Linking>
warning #10211-D: cannot resolve archive C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/lib/libc.a to a compatible library, as no input files have been encountered
warning #10062-D: entry-point symbol "_c_int00" undefined

 undefined                 first referenced                                                                      
  symbol                       in file                                                                           
 ---------                 ----------------                                                                      
 FS$$DIV                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 ___c28xabi_CLOCKS_PER_SEC CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 __abort_msg               CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 __ftable                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 __setjmp                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 _calloc                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 _clock                    CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 _ctime                    CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _exit                     CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\CUError.c.obj          
 _fclose                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _fopen                    CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _fprintf                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _fputs                    CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj
 _free                     CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _isspace                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\Util.c.obj             
 _longjmp                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 _malloc                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _memcpy                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\Util.c.obj             
 _printf                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\test.c.obj                                     
 _realloc                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj
 _setvbuf                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _snprintf                 CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj          
 _strcat                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _strcmp                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestDB.c.obj           
 _strcpy                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestDB.c.obj           
 _strlen                   CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _strncpy                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _time                     CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj        
 _toupper                  CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Console\Console.c.obj            
 _vsnprintf                CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj



error #10234-D: unresolved symbols remain

error #10010: errors encountered during linking; "bin\j1939Dcm_utest_sub0.out" not built

对应的cmake 的CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
project(j1939Dcm_utest C)

set(CMAKE_C_STANDARD 99)


set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin")


set(EXECUTABLE_SUB0 ${PROJECT_NAME}_sub0.out)

set(cunit_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CUnit)

set(cunit_SOURCE_SRCS 
  ${cunit_SOURCE_DIR}/Sources/Automated/Automated.c
  ${cunit_SOURCE_DIR}/Sources/Automated/AutomatedJUnitXml.c
  ${cunit_SOURCE_DIR}/Sources/Basic/Basic.c
  ${cunit_SOURCE_DIR}/Sources/CI/CUnitCI.c
  ${cunit_SOURCE_DIR}/Sources/Console/Console.c
  ${cunit_SOURCE_DIR}/Sources/Framework/CUError.c
  ${cunit_SOURCE_DIR}/Sources/Framework/MessageHandlers.c
  ${cunit_SOURCE_DIR}/Sources/Framework/MyMem.c
  ${cunit_SOURCE_DIR}/Sources/Framework/TestDB.c
  ${cunit_SOURCE_DIR}/Sources/Framework/TestRun.c
  ${cunit_SOURCE_DIR}/Sources/Framework/Util.c
)

add_executable(${EXECUTABLE_SUB0}
)
target_include_directories(${EXECUTABLE_SUB0}
PUBLIC ${cunit_SOURCE_DIR}
)

target_sources(${EXECUTABLE_SUB0}
    PRIVATE test.c
    PRIVATE ${cunit_SOURCE_SRCS}
)

toolchain 的文本内容:

### BEGIN CMAKE_TOOLCHAIN_FILE
# "Generic" is used when cross compiling
set(CMAKE_SYSTEM_NAME Generic)


set(CCSROOT_DIR "C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS")

set(HIGHTEC_PROJ_DIR ${CMAKE_CURRENT_LIST_DIR})

set(CMAKE_SYSROOT ${CCSROOT_DIR})

set(C_COMPILER_INCLUDE_PATH "${CCSROOT_DIR}/include")
set(CMAKE_SYSTEM_INCLUDE_PATH "${CCSROOT_DIR}/include")
set(CPU_FLAGS "-v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 --advice:performance=all -g --printf_support=full --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi")


set(CMAKE_C_COMPILER "${CCSROOT_DIR}/bin/cl2000.exe" "${CPU_FLAGS} --include_path=${C_COMPILER_INCLUDE_PATH} --preproc_with_compile")
set(CMAKE_CXX_COMPILER "${CCSROOT_DIR}/bin/cl2000.exe" "${CPU_FLAGS}")


# use response file for ninja
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)

SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@")
SET(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@")
SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1)

# Set up the CMake variables for the linker
set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/2837x_FLASH_lnk_cpu1.cmd")
set(LINKINFO_FILE "CCS_linkInfo.xml")
set(CMAKE_EXE_LINKER_FLAGS "-z -m${PROJECT_NAME}.map --heap_size=0x400 --stack_size=0x200 --warn_sections -i\"${CCSROOT_DIR}/lib\" -i\"${CCSROOT_DIR}/include\" --reread_libs --diag_wrap=off --display_error_number --xml_link_info=${LINKINFO_FILE} --rom_model ${LINKER_SCRIPT} -llibc.a")


set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)