我正在尝试构建一个将生成 .elf 文件的应用程序。此构建是使用高科技编译器和 CMAKE 环境完成的。我有一些 .c 源文件、相应的 .h 文件以及从另一个工具生成的文件。以下是我的 CMake 文件。
Cmakelists.txt
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/main_test.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/test/test2.cmake)
main_test.cmake
set(PROJ_NAME "Test_Project")
set(PROJ_EXECUTABLE_NAME "my_application")
add_executable(${PROJ_EXECUTABLE_NAME})
set_target_properties(${PROJ_EXECUTABLE_NAME}
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${PROJ_OUTPUT_PATH}/bin"
OUTPUT_NAME "${PROJ_EXECUTABLE_NAME}"
SUFFIX ".elf" # extension
)
test2 制作文件
set(MY_SRC_PATH "${PROJ_CMAKE_CONFIG_ROOT}/temp/testfiles.cmake")
if(EXISTS ${MY_SRC})
set(MYSRC_LIB_NAME MYSRC)
set(MYSRC_ASM_LIB_NAME MYSRC_ASM)
set(MYSRC_INTERFACE_LIB_NAME MYSRC_INTERFACE)
include(${MY_SRC})
message(STATUS "files are included")
else()
message(SEND_ERROR "Couldn't find config file: ${MY_SRC}")
endif()
target_link_libraries(${PROJ_EXECUTABLE_NAME} PUBLIC ${MYSRC_LIB_NAME} ${MYSRC_ASM_LIB_NAME} ${MYSRC_INTERFACE_LIB_NAME}) #link files
target_link_options(${PROJ_EXECUTABLE_NAME} PUBLIC -Wl,--whole-archive)
主 CMake 文件将调用另一个 make 文件并包含 .c 文件。
测试文件.cmake
include_header_all(LOCAL_INC "${MYCODE_SRC_PATH}/component/testscript/src") #.h files include function
include_source_all(LOCAL_SRC "${IMMUTABLE_SRC_PATH}/component/testscript/src") #.c files include function
include_assembly_all(LOCAL_ASM "${GENERATED_SRC_PATH}") #Generated files from another tool include function
add_library(${MYSRC_LIB_NAME} STATIC ${LOCAL_SRC})
add_library(${MYSRC_ASM_LIB_NAME} STATIC ${LOCAL_ASM})
add_library(${MYSRC_INTERFACE_LIB_NAME} INTERFACE)
target_include_directories(${MYSRC_INTERFACE_LIB_NAME} INTERFACE ${LOCAL_INC})
在构建时,我收到“没有为目标提供源”错误。所有路径都是正确的并提供给 cmake 文件。但我遇到了以下错误。
No SOURCES given to target: my_application
如果有人知道我在这里缺少什么,请帮助我解决这个错误,以便我能够理解我做错了什么。
根据 @Tsyvarev 评论,我已经更新了可执行文件的
target_sources
。就像 int main(){ return 0;} 。成功了。