CMake で次の動作を再現しようとしていますが、少し支援が必要です...
gcc を使用してコンパイルし、ld 明示を使用してリンクしています。元のメイクファイルは次のことを実行します。
arm-linux-gcc -MD -Wa,-mcpu=arm7tdmi -Dgcc -c init.S
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c serial.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c timer.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c amd.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c intel.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c at25f1024.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c sst25vf020.c
arm-linux-gcc -MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -c main.c
arm-linux-ld -q --defsym ROBASE=0x00000000 -T init.lds -o init.elf init.o serial.o timer.o amd.o intel.o at25f1024.o sst25vf020.o main.o
私の CMakefileLists.txt は次のようになります
cmake_minimum_required(VERSION 2.8)
project(bootStage2)
#add_definitions(ROBASE
set(CMAKE_C_FLAGS "-MD -Wall -fno-common -fshort-enums -mcpu=arm7tdmi -fno-builtin -mapcs -O2 -Wl,-q -Wl,--defsym=ROBASE=0x00000000 -T ${bootStage2_SOURCE_DIR}/init.lds")
#add_definitions(ROBASE=0x00000000)
set(SRCFILES
serial.c
timer.c
amd.c
intel.c
at25f1024.c
sst25vf020.c
main.c
)
set(CMAKE_init.elf_LINK_EXECUTABLE "/usr/bob/arm920t/usr/bin/arm-linux-ld")
add_executable( init.elf ${SRCFILES})
SET_TARGET_PROPERTIES(init.elf PROPERTIES LINKER_LANGUAGE C)
add_dependencies( init.elf
assemble_S
)
add_custom_target(assemble_S
COMMAND /usr/bob/arm920t/usr/bin/arm-linux-gcc -MD -Wa,-mcpu=arm7tdmi -Dgcc -c init.S
COMMENT "Assembling init.S"
WORKING_DIRECTORY ${bootStage2_SOURCE_DIR}
リンカー exe を定義しないと、CMake は gcc を使用してリンクを作成し、リンクの障害をセグメント化しようとします。
cmake の出力で、arm-linux-ld を使用するように指示したときに、リンクするファイルがないと不平を言います。これを行うためのより良い方法があると確信しています。誰かに役立つヒントはありますか?
乾杯、
クリス。