ftp怎么修改网站小程序开发教程

张小明 2026/1/3 14:19:23
ftp怎么修改网站,小程序开发教程,正规医院看男科大概多少钱,wordpress获取附件add_executable() 是 CMake 中用于创建可执行文件目标的核心命令#xff0c;它将源代码文件编译链接成可执行程序。 基本语法 1. 普通可执行文件 add_executable(target [WIN32] [MACOSX_BUNDLE][EXCLUDE_FROM_ALL]source1 [source2 ...])2. 导入的可执行文件 add_exe…add_executable()是 CMake 中用于创建可执行文件目标的核心命令它将源代码文件编译链接成可执行程序。基本语法1.普通可执行文件add_executable(target [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])2.导入的可执行文件add_executable(target IMPORTED [GLOBAL])3.别名可执行文件add_executable(target ALIAS aliased-target)参数详解必需参数target作用定义可执行文件的目标名称命名规则在项目中必须唯一建议使用小写字母、数字和下划线避免使用 CMake 关键字生成的文件名Unix/Linux/macOS:targetWindows:target.exe可通过set_target_properties()修改可选关键字参数WIN32作用创建 Windows GUI 应用程序非控制台程序效果Windows链接时添加/SUBSYSTEM:WINDOWS其他平台忽略此标志使用场景创建不带控制台窗口的 GUI 应用程序# Windows GUI 应用程序 add_executable(myapp WIN32 main.cpp gui.cpp) # 等价的手动设置不推荐 if(WIN32) set_target_properties(myapp PROPERTIES WIN32_EXECUTABLE TRUE ) endif()MACOSX_BUNDLE作用创建 macOS 应用程序包.app效果生成.app应用程序包设置正确的 macOS 属性需要配合set_target_properties()设置 bundle 属性# macOS 应用程序包 add_executable(myapp MACOSX_BUNDLE main.cpp) # 设置 bundle 属性 set_target_properties(myapp PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in MACOSX_BUNDLE_BUNDLE_NAME My Application MACOSX_BUNDLE_BUNDLE_VERSION 1.0.0 MACOSX_BUNDLE_SHORT_VERSION_STRING 1.0 MACOSX_BUNDLE_GUI_IDENTIFIER com.company.myapp )EXCLUDE_FROM_ALL作用从默认构建目标中排除效果运行make或cmake --build .时不自动构建必须显式指定目标名构建make myapp使用场景示例程序测试工具可选组件# 示例程序不包含在默认构建中 add_executable(example EXCLUDE_FROM_ALL example.cpp) add_executable(demo EXCLUDE_FROM_ALL demo.cpp) # 构建所有示例 add_custom_target(examples DEPENDS example demo COMMENT 构建所有示例程序 )源代码文件可以列出多个源文件支持相对路径和绝对路径可以使用生成器表达式可以使用变量和文件列表详细用法示例基础示例# 最简单的单文件程序 add_executable(hello_world main.cpp) # 多文件程序 add_executable(calculator main.cpp calculator.cpp calculator.h ui.cpp ui.h ) # 使用变量组织源文件 set(APP_SOURCES src/main.cpp src/core.cpp src/utils.cpp ) set(APP_HEADERS include/core.h include/utils.h ) add_executable(myapp ${APP_SOURCES} ${APP_HEADERS})使用文件通配符# 方法1使用 file(GLOB) - 注意新增文件不会自动重新配置 file(GLOB SOURCES src/*.cpp) file(GLOB HEADERS include/*.h) add_executable(myapp ${SOURCES} ${HEADERS}) # 方法2更安全的通配方式 file(GLOB SOURCES_CONFIGURE src/*.cpp src/*.c) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sources.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/sources.cmake) include(${CMAKE_CURRENT_BINARY_DIR}/sources.cmake) # 方法3显式列出所有文件最推荐 set(MANUAL_SOURCES src/main.cpp src/core/core.cpp src/core/processor.cpp src/utils/fileutil.cpp src/utils/stringutil.cpp ) add_executable(myapp ${MANUAL_SOURCES})条件编译# 根据平台选择不同的源文件 set(COMMON_SOURCES main.cpp common.cpp ) if(WIN32) set(PLATFORM_SOURCES win32/platform.cpp) set(PLATFORM_DEFINES WIN32_LEAN_AND_MEAN) elseif(APPLE) set(PLATFORM_SOURCES macos/platform.mm) # 注意 .mm 是 Objective-C set(PLATFORM_DEFINES APPLE_SILICON) elseif(UNIX) set(PLATFORM_SOURCES linux/platform.cpp) set(PLATFORM_DEFINES LINUX) endif() add_executable(myapp ${COMMON_SOURCES} ${PLATFORM_SOURCES} ) target_compile_definitions(myapp PRIVATE ${PLATFORM_DEFINES})使用生成器表达式# 根据配置选择不同的源文件 add_executable(myapp main.cpp $$CONFIG:Debug:debug_utils.cpp $$CONFIG:Release:release_optimizations.cpp $$BOOL:${ENABLE_PROFILING}:profiling.cpp ) # 根据编译器选择实现 add_executable(myapp main.cpp $$CXX_COMPILER_ID:GNU:gnu_specific.cpp $$CXX_COMPILER_ID:MSVC:msvc_specific.cpp $$CXX_COMPILER_ID:Clang,AppleClang:clang_specific.cpp )高级用法1.导入的可执行文件用于引用外部构建的可执行文件。# 导入外部构建的可执行文件 add_executable(external_tool IMPORTED) # 设置导入的可执行文件路径 set_target_properties(external_tool PROPERTIES IMPORTED_LOCATION /usr/bin/ffmpeg IMPORTED_LOCATION_DEBUG /usr/bin/ffmpeg-debug IMPORTED_LOCATION_RELEASE /usr/bin/ffmpeg ) # 在自定义命令中使用 add_custom_command( OUTPUT processed.mp4 COMMAND external_tool -i input.mp4 processed.mp4 DEPENDS input.mp4 ) # GLOBAL 版本在整个构建树中可见 add_executable(global_tool IMPORTED GLOBAL) set_target_properties(global_tool PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/tools/generator )2.别名目标为目标创建别名常用于提供兼容性或简化名称。# 创建主要目标 add_executable(my_application_long_name main.cpp app.cpp ) # 创建别名同目录中 add_executable(app ALIAS my_application_long_name) # 在 add_subdirectory 中使用 # 父目录 CMakeLists.txt add_subdirectory(src) # src/CMakeLists.txt add_executable(internal_app main.cpp) # 导出到父作用域 add_executable(app ALIAS internal_app) set_target_properties(internal_app PROPERTIES EXPORT_NAME app)3.多配置生成器针对不同的构建类型。# Visual Studio 等多配置生成器 add_executable(myapp main.cpp) # 为不同配置设置不同属性 set_target_properties(myapp PROPERTIES DEBUG_POSTFIX _d RELEASE_POSTFIX RELWITHDEBINFO_POSTFIX _rd MINSIZEREL_POSTFIX _ms ) # 设置不同配置的输出目录 set_target_properties(myapp PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/RelWithDebInfo RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/MinSizeRel )4.资源文件处理各种类型的资源文件。# Windows 资源文件 (.rc) if(WIN32) add_executable(myapp main.cpp resources.rc # 包含图标、版本信息等 myapp.manifest ) endif() # Qt 资源文件 find_package(Qt5 COMPONENTS Core Widgets REQUIRED) qt5_add_resources(QT_RESOURCES resources.qrc) add_executable(myapp main.cpp mainwindow.cpp ${QT_RESOURCES} ) # 处理数据文件 # 方法1复制到输出目录 configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/data/config.json ${CMAKE_CURRENT_BINARY_DIR}/config.json COPYONLY ) # 方法2作为源文件包含嵌入资源 add_executable(myapp main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/default_config.json ) # 在代码中通过文件系统访问目标属性设置常用属性设置add_executable(myapp main.cpp) # 设置输出名称 set_target_properties(myapp PROPERTIES OUTPUT_NAME MyApplication # 生成 MyApplication 或 MyApplication.exe PREFIX # 移除 lib 前缀 SUFFIX # 自定义后缀 ) # 设置版本信息 set_target_properties(myapp PROPERTIES VERSION 1.2.3 SOVERSION 1 ) # 设置编译特性 set_target_properties(myapp PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF ) # 平台特定属性 if(APPLE) set_target_properties(myapp PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist ) endif()链接属性add_executable(myapp main.cpp) # 设置链接库 target_link_libraries(myapp PRIVATE Threads::Threads ${CMAKE_DL_LIBS} ) # 设置链接选项 set_target_properties(myapp PROPERTIES LINK_FLAGS -Wl,--as-needed LINK_FLAGS_DEBUG -g LINK_FLAGS_RELEASE -O3 -s ) # Windows 特定链接选项 if(WIN32) set_target_properties(myapp PROPERTIES LINK_FLAGS /DEBUG:FULL WIN32_EXECUTABLE TRUE ) endif()完整示例项目示例 1跨平台 GUI 应用程序cmake_minimum_required(VERSION 3.15) project(ImageEditor VERSION 1.0.0 LANGUAGES CXX) # 设置 C 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找依赖 find_package(OpenCV REQUIRED) find_package(Qt5 COMPONENTS Core Widgets Gui REQUIRED) # 源文件分组 set(APP_SOURCES src/main.cpp src/mainwindow.cpp src/imageprocessor.cpp src/tools.cpp ) set(APP_HEADERS include/mainwindow.h include/imageprocessor.h include/tools.h ) set(APP_RESOURCES resources/icons.qrc resources/images.qrc ) set(APP_UI ui/mainwindow.ui ui/toolbar.ui ) # 处理 Qt 资源 qt5_wrap_ui(UI_HEADERS ${APP_UI}) qt5_add_resources(QT_RESOURCES ${APP_RESOURCES}) # 创建应用程序 if(WIN32) add_executable(imageeditor WIN32 ${APP_SOURCES} ${APP_HEADERS} ${UI_HEADERS} ${QT_RESOURCES}) elseif(APPLE) add_executable(imageeditor MACOSX_BUNDLE ${APP_SOURCES} ${APP_HEADERS} ${UI_HEADERS} ${QT_RESOURCES}) else() add_executable(imageeditor ${APP_SOURCES} ${APP_HEADERS} ${UI_HEADERS} ${QT_RESOURCES}) endif() # 设置目标属性 set_target_properties(imageeditor PROPERTIES OUTPUT_NAME ImageEditor DEBUG_POSTFIX _d CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON ) # 包含目录 target_include_directories(imageeditor PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/ui # 生成的 UI 头文件 ) # 链接库 target_link_libraries(imageeditor PRIVATE Qt5::Core Qt5::Widgets Qt5::Gui OpenCV::opencv ) # 安装目标 install(TARGETS imageeditor RUNTIME DESTINATION bin BUNDLE DESTINATION . ) if(APPLE) # macOS 特定安装 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/AppIcon.icns DESTINATION ${CMAKE_INSTALL_PREFIX}/ImageEditor.app/Contents/Resources ) endif()示例 2命令行工具cmake_minimum_required(VERSION 3.10) project(FileConverter VERSION 1.2.0 LANGUAGES CXX) # 工具选项 option(ENABLE_GUI 启用 GUI 版本 OFF) option(BUILD_TESTS 构建测试 ON) # 公共源文件 set(COMMON_SOURCES src/common/utils.cpp src/common/fileops.cpp src/common/format.cpp ) set(COMMON_HEADERS include/common/utils.h include/common/fileops.h include/common/format.h ) # 命令行版本 add_executable(fconverter_cli src/cli/main.cpp src/cli/cli_parser.cpp ${COMMON_SOURCES} ) target_include_directories(fconverter_cli PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(fconverter_cli PRIVATE Threads::Threads ) # 设置命令行工具属性 set_target_properties(fconverter_cli PROPERTIES OUTPUT_NAME fconvert RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/tools ) # 可选 GUI 版本 if(ENABLE_GUI) find_package(Qt5 COMPONENTS Core Widgets REQUIRED) add_executable(fconverter_gui src/gui/main.cpp src/gui/mainwindow.cpp ${COMMON_SOURCES} ) target_link_libraries(fconverter_gui PRIVATE Qt5::Core Qt5::Widgets Threads::Threads ) set_target_properties(fconverter_gui PROPERTIES OUTPUT_NAME FileConverter WIN32_EXECUTABLE TRUE ) endif() # 测试工具不包含在默认构建中 if(BUILD_TESTS) add_executable(test_runner EXCLUDE_FROM_ALL tests/main.cpp tests/test_utils.cpp tests/test_fileops.cpp ${COMMON_SOURCES} ) target_link_libraries(test_runner PRIVATE GTest::gtest_main ) # 添加测试 add_test(NAME UnitTests COMMAND test_runner) endif()示例 3多目标项目cmake_minimum_required(VERSION 3.14) project(NetworkTools VERSION 2.1.0 LANGUAGES C) # 公共设置 set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) # 公共源代码 set(COMMON_SOURCES src/common/net_utils.c src/common/logger.c ) set(COMMON_HEADERS include/common/net_utils.h include/common/logger.h ) # 工具1端口扫描器 add_executable(port_scanner tools/scanner/main.c tools/scanner/portscan.c ${COMMON_SOURCES} ) target_include_directories(port_scanner PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_compile_definitions(port_scanner PRIVATE TOOL_NAMEPort Scanner ) # 工具2网络监视器 add_executable(net_monitor tools/monitor/main.c tools/monitor/traffic.c ${COMMON_SOURCES} ) target_include_directories(net_monitor PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_compile_definitions(net_monitor PRIVATE TOOL_NAMENetwork Monitor ) # 工具3数据包分析器可选 option(BUILD_PACKET_ANALYZER 构建数据包分析器 OFF) if(BUILD_PACKET_ANALYZER) find_package(PCAP REQUIRED) add_executable(packet_analyzer tools/analyzer/main.c tools/analyzer/packet.c ${COMMON_SOURCES} ) target_include_directories(packet_analyzer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${PCAP_INCLUDE_DIRS} ) target_link_libraries(packet_analyzer PRIVATE ${PCAP_LIBRARIES} ) endif() # 创建聚合目标 add_custom_target(all_tools DEPENDS port_scanner net_monitor COMMENT 构建所有网络工具 ) if(BUILD_PACKET_ANALYZER) add_dependencies(all_tools packet_analyzer) endif()最佳实践1.源文件管理# 不推荐使用 GLOB新增文件不会触发重新配置 file(GLOB ALL_SOURCES src/*.cpp) add_executable(app ${ALL_SOURCES}) # 推荐显式列出源文件 set(SOURCES src/main.cpp src/core.cpp src/utils.cpp ) # 或使用辅助脚本生成源文件列表 configure_file(sources.cmake.in sources.cmake ONLY) include(sources.cmake)2.头文件处理# 将头文件添加到源文件列表支持 IDE add_executable(myapp src/main.cpp include/myapp.h src/internal.h ) # 或者如果不希望在 IDE 中看到头文件 add_executable(myapp src/main.cpp) target_include_directories(myapp PRIVATE include)3.目录组织# 清晰的目录结构 add_executable(myapp src/main.cpp src/core/ core.cpp processor.cpp src/utils/ fileutil.cpp stringutil.cpp src/gui/ mainwindow.cpp dialog.cpp ) # 设置不同的包含目录 target_include_directories(myapp PRIVATE src/core src/utils src/gui ${CMAKE_CURRENT_BINARY_DIR} # 生成的头文件 )4.平台兼容性add_executable(myapp main.cpp) # 平台特定设置 if(WIN32) target_sources(myapp PRIVATE src/platform/win32.cpp $$CONFIG:DEBUG:src/platform/win32_debug.cpp ) target_compile_definitions(myapp PRIVATE _WIN32_WINNT0x0A00) elseif(APPLE) target_sources(myapp PRIVATE src/platform/macos.mm) set_target_properties(myapp PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} ) elseif(UNIX) target_sources(myapp PRIVATE src/platform/linux.cpp) target_link_libraries(myapp PRIVATE pthread dl) endif()常见问题问题 1源文件未找到# 错误相对路径问题 add_executable(app ../other_dir/main.cpp) # 可能工作但不推荐 # 正确使用绝对路径或相对于 CMakeLists.txt 的路径 add_executable(app ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/core.cpp )问题 2重复目标名# 错误目标名重复 add_executable(myapp main.cpp) add_executable(myapp other.cpp) # 错误目标名已存在 # 正确使用不同的目标名 add_executable(app1 main.cpp) add_executable(app2 other.cpp)问题 3生成器表达式错误# 错误生成器表达式使用不当 add_executable(app $IF:1,main.cpp,other.cpp) # 错误IF 不能这样用 # 正确使用合适的生成器表达式 add_executable(app main.cpp $$CONFIG:Debug:debug_helpers.cpp )调试技巧检查目标属性add_executable(myapp main.cpp) # 查看目标的所有属性 get_target_property(SOURCES myapp SOURCES) message(STATUS 源文件: ${SOURCES}) # 查看链接库 get_target_property(LIBS myapp LINK_LIBRARIES) message(STATUS 链接库: ${LIBS}) # 查看包含目录 get_target_property(INCLUDES myapp INCLUDE_DIRECTORIES) message(STATUS 包含目录: ${INCLUDES})验证目标function(validate_target target_name) if(NOT TARGET ${target_name}) message(FATAL_ERROR 目标 ${target_name} 不存在) endif() get_target_property(target_type ${target_name} TYPE) if(NOT target_type STREQUAL EXECUTABLE) message(WARNING ${target_name} 不是可执行文件目标) endif() endfunction() add_executable(myapp main.cpp) validate_target(myapp)add_executable()是 CMake 构建可执行程序的基础合理使用可以创建高效、可维护的跨平台应用程序。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

电子商务网站建设汉狮开一家软件外包公司

如何快速迁移Visio图表:drawio-desktop的跨平台终极解决方案 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 在企业数字化转型浪潮中,许多技术团队都面临…

张小明 2026/1/2 2:01:06 网站建设

西安网站建设网站排名优化郴州网站建设服务

医疗行业Office 365配置与安全保障指南 1. 医疗行业面临的挑战与Office 365的机遇 医疗行业每天都面临着越来越大的压力,需要在降低运营成本的同时,保持强大的安全保护措施,以应对新出现的威胁、监管执法活动和数据泄露防范。患者要求更高的透明度和更好的护理,而临床医生…

张小明 2026/1/1 13:12:58 网站建设

网站调用新浪微博虚拟主机销售网站

如果你也有过这些瞬间—— 搜文献半天只看到“购买全文”? 盯着满屏英文看了 10 分钟才理解一句话? 好不容易读完却不知道重点在哪? 别怀疑,很多人都这样。 但更聪明的办法,是让工具替你干活。 一、Sci-Hub&#xff1…

张小明 2026/1/1 11:40:04 网站建设

科技馆网站建设网站推广优化教程

智效合一:深度解析 AI 智能体中的“资源感知优化”架构模式 在 AI 领域,我们正从“模型竞赛”转向“应用落地”。然而,当开发者试图将复杂的 Agent(智能体)推向生产环境时,往往会撞上一堵墙:成…

张小明 2026/1/2 17:44:09 网站建设

网站 建设网站凡客诚品网站地址

CustomThreads终极指南:Fusion 360中完美3D打印螺纹的完整解决方案 【免费下载链接】CustomThreads Fusion 360 Thread Profiles for 3D-Printed Threads 项目地址: https://gitcode.com/gh_mirrors/cu/CustomThreads 在3D打印领域,螺纹连接的可靠…

张小明 2026/1/2 18:22:01 网站建设

网站风格抄袭企业网站建设带后台

理解和使用传输层安全(TLS) 一、TLS的常见误解 TLS在保障通信安全方面发挥着重要作用,但存在一些常见的误解: 1. TLS不保护客户端到服务器后的内容 :一旦服务器接收并存储消息,消息就会恢复为明文。 2. TLS仅保证从邮件客户端到邮件服务器的加密 :邮件服务器可能…

张小明 2026/1/2 15:15:22 网站建设