91视频专区

三年之后又三年!最具颠覆结局的黑帮电影《新世界》|韩国...新金瓶梅 - 百度百科

东吴证券预计2024、2025年仍将是比亚迪产物大年,预计销量分别为400万辆、500万辆,同增33%、25%。

2024年12月28日,CMake构建Makefile深度解析:从底层原理到复杂项目2023-06-10 21:24·linux技术栈一、CMake构建后的项目结构解析(Analysis of the Project Structure After CMake Build)1.1 CMake构建后的目录结构(Directory Structure After CMake Build)CMake构建完成后,会在项目的根目录下生成一个名为build的目录。这个目录是CMake构建过程中所有中间文件和最终生成的目标文件的存放地。下面我们将详细解析这个目录的结构。首先,我们来看一下build目录的一级子目录:CMakeFiles:这个目录中存放的是CMake在构建过程中生成的临时文件,包括编译器检查的结果、Find模块(Find Modules)查找的结果等。这些文件主要用于CMake自身的需求,一般情况下,我们不需要关注这个目录的内容。Testing:如果你的项目中包含了CTest测试,那么这个目录将会被生成。它包含了所有CTest测试的结果。bin:这个目录中包含了所有的可执行文件(Executable Files)。如果你的CMake项目中包含了多个可执行文件,那么它们都会被放在这个目录中。lib:这个目录中包含了所有的库文件(Library Files)。无论是静态库(Static Libraries)还是动态库(Dynamic Libraries),都会被放在这个目录中。接下来,我们再深入到CMakeFiles目录中,看一下它的二级子目录:project.dir:这个目录中包含了项目构建过程中的临时文件,如.o文件和.d文件。这些文件是编译器在编译源代码时生成的。CMakeOutput.log:这个文件记录了CMake在配置过程中的输出信息,包括编译器检查的结果、Find模块查找的结果等。CMakeError.log:这个文件记录了CMake在配置过程中遇到的错误信息。以上就是CMake构建后的目录结构的基本情况。在实际的项目中,可能会根据项目的具体需求,生成更多的子目录和文件。但是,这些基本的目录和文件是你在任何一个使用CMake构建的项目中都能看到的。1.2 构建生成的文件类型及其作用(Types of Files Generated by the Build and Their Functions)CMake构建过程中会生成多种类型的文件,每种文件都有其特定的作用。下面我们将详细解析这些文件的类型和作用。CMakeFiles目录:这个目录中存放的是CMake在构建过程中生成的临时文件,包括编译器检查的结果、Find模块(Find Modules)查找的结果等。这些文件主要用于CMake自身的需求,一般情况下,我们不需要关注这个目录的内容。project.dir目录:这个目录中包含了项目构建过程中的临时文件,如.o文件和.d文件。这些文件是编译器在编译源代码时生成的。CMakeOutput.log文件:这个文件记录了CMake在配置过程中的输出信息,包括编译器检查的结果、Find模块查找的结果等。CMakeError.log文件:这个文件记录了CMake在配置过程中遇到的错误信息。Testing目录:如果你的项目中包含了CTest测试,那么这个目录将会被生成。它包含了所有CTest测试的结果。bin目录:这个目录中包含了所有的可执行文件(Executable Files)。如果你的CMake项目中包含了多个可执行文件,那么它们都会被放在这个目录中。lib目录:这个目录中包含了所有的库文件(Library Files)。无论是静态库(Static Libraries)还是动态库(Dynamic Libraries),都会被放在这个目录中。以上就是CMake构建过程中生成的主要文件类型及其作用。理解这些文件的作用,可以帮助我们更好地理解CMake的构建过程。1.3 CMakeLists.txt与生成的Makefile的关系(The Relationship Between CMakeLists.txt and the Generated Makefile)在CMake构建系统中,CMakeLists.txt文件和生成的Makefile文件之间存在着密切的关系。下面我们将详细解析这种关系。CMakeLists.txt是CMake构建系统的核心文件,它定义了项目的构建规则和依赖关系。在执行CMake命令时,CMake会读取CMakeLists.txt文件,解析其中的构建规则和依赖关系,然后生成相应的Makefile文件。Makefile文件是由CMake根据CMakeLists.txt文件生成的,它是Make构建工具可以直接读取的构建脚本。Makefile文件中包含了具体的编译命令和链接命令,以及源文件和目标文件之间的依赖关系。在一个CMake项目中,通常会有多个CMakeLists.txt文件,每个目录下都可以有一个CMakeLists.txt文件。这些CMakeLists.txt文件中定义的构建规则和依赖关系,会被CMake合并到一起,生成一个或多个Makefile文件。如果一个CMake项目中只有一个CMakeLists.txt文件,那么CMake会生成一个Makefile文件。如果一个CMake项目中有多个CMakeLists.txt文件,那么CMake会在每个CMakeLists.txt文件所在的目录下生成一个Makefile文件。这些Makefile文件中,顶层目录下的Makefile文件是主Makefile文件,它会调用其他目录下的Makefile文件。总的来说,CMakeLists.txt文件和生成的Makefile文件之间的关系是:CMakeLists.txt文件定义了项目的构建规则和依赖关系,CMake根据CMakeLists.txt文件生成Makefile文件,然后Make根据Makefile文件执行具体的构建任务。相关视频推荐从程序编译到掌握 cmake 项目构建工具2023就业行情一片惨淡,如何拿到自己理想的offer?2023年最新技术图谱,c++后端的8个技术维度,助力你快速成为大牛需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享二、深入理解CMake生成的Makefile2.1 Makefile的基本结构和原理Makefile是GNU make工具的配置文件,它定义了一组规则来指定哪些文件需要被更新,以及如何更新这些文件。在C++项目中,Makefile通常用于编译源代码并生成可执行文件。Makefile的基本结构包括三个部分:目标(Target)、依赖(Dependencies)和命令(Commands)。目标(Target):这是需要生成的文件名。它可以是一个对象文件(Object File),也可以是一个可执行文件(Executable File)。依赖(Dependencies):这些是目标文件需要的源文件。如果任何一个依赖文件比目标文件更新,那么目标文件就需要被重新生成。命令(Commands):这些是生成目标文件所需要执行的shell命令。这些命令必须以Tab字符开始。下面是一个简单的Makefile示例:target: dependencies commands在CMake中,CMakeLists.txt文件中的指令会被转换为Makefile中的目标、依赖和命令。例如,add_executable指令会生成一个目标,target_link_libraries指令会生成依赖,而实际的编译和链接命令则由CMake自动生成。理解Makefile的基本结构和原理,对于深入理解CMake生成的Makefile有着重要的作用。在下一节中,我们将进一步探讨多个CMakeLists.txt生成的Makefile的解析。2.2 多个CMakeLists.txt生成的Makefile解析在大型的C++项目中,通常会有多个CMakeLists.txt文件,每个目录下都有一个。这种结构有助于保持项目的模块化,使得每个部分可以独立地被构建和测试。当运行CMake命令时,它会首先查找根目录下的CMakeLists.txt文件,然后递归地处理每个子目录中的CMakeLists.txt文件。每个CMakeLists.txt文件都会生成一个对应的Makefile。在这个过程中,CMake会处理CMakeLists.txt文件中的指令,如add_executable、add_library、target_link_libraries等,并将这些指令转换为Makefile中的目标、依赖和命令。例如,如果我们有如下的目录结构:project/├── CMakeLists.txt├── main.cpp└── module/ ├── CMakeLists.txt └── module.cpp在根目录的CMakeLists.txt文件中,我们可能会有如下的指令:add_executable(main main.cpp)add_subdirectory(module)target_link_libraries(main module)在module目录的CMakeLists.txt文件中,我们可能会有如下的指令:add_library(module module.cpp)在这个例子中,CMake会生成两个Makefile,一个在project目录,一个在project/module目录。在project目录的Makefile中,会有一个名为main的目标,它依赖于main.cpp和module目录的Makefile中生成的库。在project/module目录的Makefile中,会有一个名为module的目标,它依赖于module.cpp。通过这种方式,CMake使得每个子目录可以独立地被构建,同时也保证了整个项目的构建顺序。2.3 CMake与Makefile的对应关系CMake是一个跨平台的构建系统,它的主要任务是根据用户的需求生成适当的Makefile文件。CMake通过读取CMakeLists.txt文件来了解用户的需求,然后生成对应的Makefile文件。在CMake与Makefile之间,存在一种明确的对应关系。CMakeLists.txt文件中的每一条指令,都会在生成的Makefile文件中有一个对应的表现。下面我们来看一些常见的CMake指令,以及它们在Makefile中的对应关系:add_executable:这个CMake指令用于定义一个可执行文件的目标。在生成的Makefile中,这个目标会被定义为一个规则,规则的目标是可执行文件,依赖项是源文件,命令是编译命令。add_library:这个CMake指令用于定义一个库文件的目标。在生成的Makefile中,这个目标也会被定义为一个规则,规则的目标是库文件,依赖项是源文件,命令是编译命令。target_link_libraries:这个CMake指令用于定义目标的链接库。在生成的Makefile中,这个指令会影响到链接命令,链接命令会包含对应的库文件。add_subdirectory:这个CMake指令用于添加子目录。在生成的Makefile中,这个指令会导致生成一个新的Makefile文件在对应的子目录中。通过理解CMake与Makefile的对应关系,我们可以更好地理解CMake的工作原理,以及如何编写有效的CMakeLists.txt文件。在下一章节中,我们将进一步探讨CMake构建过程的底层原理。三、CMake构建过程的底层原理(Underlying Principles of the CMake Build Process)3.1 CMake构建过程的基本流程(Basic Flow of the CMake Build Process)CMake的构建过程可以分为三个主要步骤:配置(Configuration)、生成(Generation)和构建(Build)。下面我们将详细解析每个步骤。1、配置(Configuration)配置阶段是CMake解析CMakeLists.txt文件的过程。在这个阶段,CMake会读取CMakeLists.txt文件,并执行其中的命令。这些命令主要用于检查系统环境(例如编译器、库等),设置构建选项,以及定义构建目标(例如库、可执行文件等)。CMakeLists.txt文件是CMake的核心,它定义了项目的构建规则和依赖关系。每个目录(包括子目录)中都可以有一个CMakeLists.txt文件。在配置阶段,CMake会从顶层目录的CMakeLists.txt文件开始,递归地处理每个子目录中的CMakeLists.txt文件。2、生成(Generation)生成阶段是CMake根据配置阶段的结果,生成实际的构建文件的过程。这些构建文件通常是Makefile文件,但也可以是其他类型的构建文件,例如Ninja构建文件,或者Visual Studio项目文件,这取决于你选择的构建工具。在生成阶段,CMake会将CMakeLists.txt文件中定义的构建规则和依赖关系,转换为构建工具可以理解的形式。例如,如果你选择的构建工具是Make,CMake会生成Makefile文件。每个目录(包括子目录)中都会生成一个Makefile文件。3、构建(Build)构建阶段是使用构建工具(例如Make、Ninja或Visual Studio)根据生成的构建文件,编译源代码并链接生成目标文件的过程。在构建阶段,构建工具会读取生成的构建文件,按照其中定义的规则和依赖关系,执行实际的编译和链接操作。构建工具会自动处理依赖关系,确保在编译和链接一个目标文件之前,其所有依赖的目标文件都已经被正确地编译和链接。以上就是CMake构建过程的基本流程。在理解了这个流程之后,我们就可以更深入地探讨CMake如何生成Makefile,以及CMake构建过程中的关键步骤了。3.2 CMake如何生成Makefile(How CMake Generates Makefile)CMake生成Makefile的过程是在其生成阶段完成的。这个过程主要涉及到CMake的核心组件——生成器(Generator)。下面我们将详细解析这个过程。1、选择生成器(Selecting a Generator)在CMake的生成阶段开始时,首先需要选择一个生成器。生成器是CMake的一个核心组件,它负责将CMakeLists.txt文件中的构建规则和依赖关系,转换为特定构建工具可以理解的形式。CMake支持多种生成器,可以生成Makefile文件,也可以生成Ninja构建文件,或者Visual Studio项目文件等。选择生成器的方式通常是在运行CMake命令时,通过-G选项指定。例如,如果你想生成Unix风格的Makefile文件,可以使用"Unix Makefiles"生成器,命令如下:cmake -G "Unix Makefiles"如果没有指定生成器,CMake会选择一个默认的生成器,这个默认的生成器通常是根据你的系统环境自动选择的。2、生成Makefile选择好生成器之后,CMake就会开始生成Makefile文件。在这个过程中,CMake会遍历项目中的每个目录(包括子目录),对每个目录中的CMakeLists.txt文件进行处理。对于每个CMakeLists.txt文件,CMake会解析其中的命令,根据这些命令定义的构建规则和依赖关系,生成对应的Makefile文件。每个CMakeLists.txt文件都会生成一个Makefile文件,这个Makefile文件中包含了编译和链接该目录中的目标文件所需要的规则和命令。在生成Makefile文件时,CMake会自动处理目标文件之间的依赖关系。如果一个目标文件依赖于其他目标文件,CMake会在生成的Makefile文件中,为这个目标文件添加相应的依赖规则。以上就是CMake如何生成Makefile的过程。理解了这个过程,我们就可以更好地理解CMake构建过程中的关键步骤,以及CMake与Makefile之间的关系了。3.3 CMake构建过程中的关键步骤(Key Steps in the CMake Build Process)CMake构建过程中的关键步骤主要包括以下几个方面:1、解析CMakeLists.txt文件(Parsing CMakeLists.txt Files)这是CMake构建过程的第一步,也是最关键的一步。CMakeLists.txt文件是CMake的核心,它定义了项目的构建规则和依赖关系。CMake需要解析这个文件,以获取构建项目所需的所有信息。2、检查系统环境(Checking System Environment)在CMakeLists.txt文件中,通常会包含一些检查系统环境的命令,例如检查编译器、库等。这些命令在CMake构建过程中会被执行,以确保系统环境满足项目的构建需求。3、生成构建文件(Generating Build Files)CMake的主要任务是生成构建文件,这些构建文件通常是Makefile文件,但也可以是其他类型的构建文件,例如Ninja构建文件,或者Visual Studio项目文件,这取决于你选择的构建工具。生成构建文件的过程是CMake构建过程中的一个关键步骤。4、执行构建命令(Executing Build Commands)在生成了构建文件之后,就可以开始执行构建命令了。这些构建命令通常是由构建工具(例如Make、Ninja或Visual Studio)执行的。构建工具会根据构建文件中定义的规则和命令,编译源代码并链接生成目标文件。以上就是CMake构建过程中的关键步骤。理解了这些步骤,我们就可以更好地理解CMake的工作原理,以及如何使用CMake进行项目构建了。四、CMake在复杂项目中的应用(Application of CMake in Complex Projects)4.1 复杂项目中的CMake构建策略(CMake Build Strategy in Complex Projects)在复杂的项目中,CMake的构建策略需要更加精细和周全。我们需要考虑到项目的模块化,依赖关系,以及可能存在的平台差异。以下是一些在复杂项目中使用CMake的策略和建议。4.1.1 模块化的CMakeLists.txt(Modularized CMakeLists.txt)在大型项目中,我们通常会看到项目被划分为多个模块或子项目,每个模块都有自己的源代码和依赖。这种情况下,我们可以为每个模块创建一个CMakeLists.txt文件,这样可以使构建过程更加清晰,也方便我们管理每个模块的构建规则。例如,我们可以在每个模块的目录下创建一个CMakeLists.txt文件,然后在项目的顶级目录下的CMakeLists.txt文件中使用add_subdirectory()命令来添加这些模块。4.1.2 管理依赖关系(Managing Dependencies)在复杂的项目中,不同的模块可能会有各种依赖关系。CMake提供了一些命令来帮助我们管理这些依赖关系,例如target_link_libraries()命令可以用来指定一个目标需要链接的库。在处理依赖关系时,我们需要注意的一个重要原则是:尽量让依赖关系明确和直观。这意味着,如果一个模块A依赖于模块B,那么在模块A的CMakeLists.txt文件中,我们应该明确地指出这个依赖关系。4.1.3 处理平台差异(Handling Platform Differences)在跨平台的项目中,我们可能需要处理不同平台的差异。CMake提供了一些变量和命令来帮助我们处理这些差异,例如CMAKE_SYSTEM_NAME变量可以用来检测当前的操作系统,if()命令可以用来根据不同的条件执行不同的命令。在处理平台差异时,我们应该尽量避免硬编码特定平台的信息。相反,我们应该尽可能地使用CMake提供的变量和命令,这样可以使我们的CMakeLists.txt文件更加通用和可维护。以上就是在复杂项目中使用CMake的一些策略和建议。在实际应用中,我们还需要根据项目的具体情况和需求来调整和优化我们的CMake构建策略。4.1.4 使用现代CMake命令(Using Modern CMake Commands)现代的CMake版本提供了一些新的命令和特性,这些命令和特性可以使我们的CMakeLists.txt文件更加简洁和易于理解。例如,target_include_directories()命令可以用来指定一个目标的头文件搜索路径,这比使用旧的include_directories()命令更加灵活和直观。在使用现代CMake命令时,我们需要注意的一个重要原则是:尽量使用目标属性(target properties)而不是全局变量(global variables)。这是因为目标属性可以使我们的CMakeLists.txt文件更加模块化,也更容易理解和维护。4.1.5 利用CMake的脚本功能(Leveraging CMake’s Scripting Capabilities)CMake不仅是一个构建工具,它也是一种脚本语言。我们可以利用CMake的脚本功能来实现一些复杂的构建逻辑,例如,我们可以使用if()、foreach()等命令来编写循环和条件语句。在使用CMake的脚本功能时,我们需要注意的一个重要原则是:尽量避免过度复杂的脚本逻辑。过度复杂的脚本逻辑可能会使我们的CMakeLists.txt文件难以理解和维护。相反,我们应该尽可能地使用CMake提供的命令和特性,这样可以使我们的CMakeLists.txt文件更加简洁和易于理解。以上就是在复杂项目中使用CMake的一些策略和建议。在实际应用中,我们还需要根据项目的具体情况和需求来调整和优化我们的CMake构建策略。4.2 多个CMakeLists.txt在复杂项目中的管理(Management of Multiple CMakeLists.txt in Complex Projects)在大型的复杂项目中,我们通常会有多个CMakeLists.txt文件,每个子目录下都可能有一个。这些CMakeLists.txt文件共同定义了整个项目的构建规则。管理这些CMakeLists.txt文件是一个重要的任务,以下是一些策略和建议。4.2.1 模块化管理(Modular Management)每个CMakeLists.txt文件应该只负责管理其所在目录下的源代码和依赖。这样可以使每个CMakeLists.txt文件的内容保持简洁,也方便我们理解和维护每个模块的构建规则。4.2.2 统一的构建规则(Unified Build Rules)尽管每个CMakeLists.txt文件都有其自己的构建规则,但我们应该尽量使这些构建规则保持一致。这样可以使我们的构建过程更加可预测,也方便我们管理和维护我们的构建规则。4.2.3 利用CMake的包管理功能(Leveraging CMake’s Package Management Features)CMake提供了一些命令和特性来帮助我们管理项目的依赖,例如find_package()命令可以用来查找和加载外部库。我们应该尽量利用这些命令和特性,这样可以使我们的CMakeLists.txt文件更加简洁,也可以避免一些常见的依赖问题。4.2.4 避免硬编码路径(Avoid Hard-Coded Paths)在CMakeLists.txt文件中,我们应该尽量避免硬编码路径。硬编码的路径可能会使我们的构建过程依赖于特定的目录结构,这会降低我们的构建规则的可移植性。相反,我们应该尽可能地使用CMake提供的变量和命令来指定路径,这样可以使我们的CMakeLists.txt文件更加通用和可维护。以上就是在复杂项目中管理多个CMakeLists.txt文件的一些策略和建议。在实际应用中,我们还需要根据项目的具体情况和需求来调整和优化我们的管理策略。4.3 CMake在大型项目中的最佳实践(Best Practices of CMake in Large Projects)在大型项目中使用CMake,我们需要遵循一些最佳实践,以确保构建过程的高效、稳定和可维护。以下是一些在大型项目中使用CMake的最佳实践。4.3.1 使用最新版本的CMake(Use the Latest Version of CMake)尽可能使用最新版本的CMake。新版本的CMake通常会包含一些新的特性和改进,这些特性和改进可能会使我们的构建过程更加高效和稳定。此外,新版本的CMake也可能会修复一些旧版本中的问题和缺陷。4.3.2 避免在CMakeLists.txt文件中修改编译器标志(Avoid Modifying Compiler Flags in CMakeLists.txt Files)在CMakeLists.txt文件中直接修改编译器标志可能会导致一些问题。例如,这可能会覆盖用户在命令行中指定的编译器标志,或者导致在不同平台上的构建行为不一致。相反,我们应该使用CMake提供的命令和特性来管理编译器标志,例如target_compile_options()命令。4.3.3 使用CMake的测试功能(Use CMake’s Testing Features)CMake提供了一些命令和特性来帮助我们管理和运行测试,例如enable_testing()命令和add_test()命令。我们应该尽量利用这些命令和特性,这样可以使我们的测试过程更加自动化和可控。4.3.4 使用CMake的安装功能(Use CMake’s Installation Features)CMake提供了一些命令和特性来帮助我们管理项目的安装过程,例如install()命令。我们应该尽量利用这些命令和特性,这样可以使我们的安装过程更加自动化和可控。以上就是在大型项目中使用CMake的一些最佳实践。在实际应用中,我们还需要根据项目的具体情况和需求来调整和优化我们的构建过程。五、CMake生成的Makefile详解5.1 CMake如何翻译生成Makefile在深入理解CMake如何翻译生成Makefile之前,我们首先来看一下CMake与Makefile的关系。如下图所示,CMake通过解析CMakeLists.txt文件,生成对应的Makefile,然后执行Makefile进行编译链接,最后生成可执行文件。CMake的主要工作就是解析CMakeLists.txt文件,并将其翻译成Makefile。CMakeLists.txt文件是CMake的核心,它定义了项目的构建规则,包括项目的目录结构、需要编译的源文件、依赖关系、编译参数等信息。CMake通过读取CMakeLists.txt文件,理解这些构建规则,然后生成对应的Makefile。在生成Makefile的过程中,CMake会进行一系列的翻译操作。这些操作主要包括:解析CMakeLists.txt文件:CMake首先会读取CMakeLists.txt文件,解析其中的命令和参数,理解项目的构建规则。生成Makefile:根据解析得到的构建规则,CMake会生成对应的Makefile。这个Makefile包含了所有的编译链接命令,以及源文件和目标文件之间的依赖关系。处理依赖关系:在生成Makefile的过程中,CMake会处理源文件之间的依赖关系。如果一个源文件依赖于另一个源文件,那么在Makefile中,这个源文件的编译命令就会依赖于另一个源文件的编译命令。设置编译参数:CMake还会设置Makefile中的编译参数,包括编译器选项、链接器选项等。这些参数会影响到编译链接的过程。以上就是CMake如何翻译生成Makefile的基本过程。在后续的小节中,我们将深入探讨Makefile的详细结构和原理,以及如何在CMake中使用外部Makefile等高级话题。5.2 Makefile的详细解析Makefile是由make工具执行的一种脚本文件,它描述了一组目标(target)以及构建这些目标所需的规则(rule)。在CMake生成的Makefile中,每一个目标通常对应一个或多个源文件,而规则则描述了如何从这些源文件生成目标。以下是一个简单的Makefile示例:all: hellohello: main.o function.o g++ main.o function.o -o hellomain.o: main.cpp g++ -c main.cppfunction.o: function.cpp g++ -c function.cppclean: rm *.o hello在这个示例中,all、hello、main.o、function.o和clean都是目标,而每个目标后面的内容则是构建该目标的规则。例如,hello目标的规则是g++ main.o function.o -o hello,这条规则告诉make工具如何从main.o和function.o这两个源文件生成hello这个目标。在CMake生成的Makefile中,这些规则会更加复杂,因为它们需要处理项目中的依赖关系、编译参数等问题。但是,基本的结构和原理是相同的:每个目标都有一组规则,这些规则描述了如何从源文件生成目标。5.3 CMake如何翻译生成Makefile当然可以,让我们更深入地探讨一些CMake命令和生成的Makefile之间的关系。add_executable:这个命令在CMake中用于定义一个目标可执行文件。例如,add_executable(hello main.cpp)会定义一个名为hello的目标,这个目标由main.cpp这个源文件生成。在生成的Makefile中,这个命令会被翻译成一个编译命令,如$(CXX) $(CXXFLAGS) -o hello main.cpp。这条命令告诉make工具使用C++编译器(( C X X ) )和编译选项( (CXX))和编译选项((CXX))和编译选项((CXXFLAGS))来编译main.cpp,并将输出文件命名为hello。add_library:这个命令在CMake中用于定义一个目标库文件。例如,add_library(mylib mylib.cpp)会定义一个名为mylib的目标,这个目标由mylib.cpp这个源文件生成。在生成的Makefile中,这个命令会被翻译成一个库生成命令,如$(AR) $(ARFLAGS) mylib mylib.cpp。这条命令告诉make工具使用库生成器(( A R ) )和库生成选项( (AR))和库生成选项((AR))和库生成选项((ARFLAGS))来生成mylib这个库。target_link_libraries:这个命令在CMake中用于定义目标的链接库。例如,target_link_libraries(hello mylib)会告诉CMake,hello这个目标需要链接mylib这个库。在生成的Makefile中,这个命令会被翻译成一个链接命令,如$(CXX) $(LDFLAGS) -o hello main.cpp -lmylib。这条命令告诉make工具在链接hello时,需要链接mylib这个库。以上就是CMake命令和生成的Makefile之间的一些基本关系。在实际的项目中,这些关系可能会更复杂,因为CMake和Makefile都是非常强大的工具,它们提供了许多高级功能来处理项目中的各种问题。但是,理解这些基本关系是理解CMake和Makefile的关键。5.4 CMake生成的Makefile中的常见问题及解决方案在使用CMake生成Makefile的过程中,可能会遇到一些常见的问题。这些问题可能涉及到Makefile的生成、执行、以及依赖关系的处理等方面。下面我们将详细介绍这些问题,以及相应的解决方案。Makefile生成失败:这是一个比较常见的问题,通常是由于CMakeLists.txt文件中的错误导致的。解决这个问题的方法是检查CMakeLists.txt文件,确保其中的命令和参数都是正确的。Makefile执行错误:这个问题通常是由于Makefile中的命令错误导致的。解决这个问题的方法是检查Makefile,确保其中的编译链接命令都是正确的。依赖关系处理错误:这个问题通常是由于CMake处理源文件之间的依赖关系时出错导致的。解决这个问题的方法是检查CMakeLists.txt文件,确保其中的依赖关系都是正确的。以上就是在使用CMake生成Makefile时可能遇到的一些常见问题,以及相应的解决方案。在实际使用中,可能还会遇到其他的问题,这时候需要根据具体的错误信息,进行相应的排查和解决。六、CMake与外部Makefile的交互(Interaction Between CMake and External Makefile)6.1 如何在CMake中使用外部Makefile(How to Use External Makefile in CMake)在CMake中使用外部Makefile,我们可以使用add_custom_command和add_custom_target这两个命令。这两个命令可以用来执行一些自定义的构建规则,比如运行一个脚本,创建一个文件,或者运行一个Makefile。6.1.1 add_custom_commandadd_custom_command命令用于定义如何生成一个文件。这个命令有很多参数,但是最常用的是OUTPUT,COMMAND和DEPENDS。OUTPUT参数用于指定生成的文件。COMMAND参数用于指定生成文件的命令,可以是任何shell命令。DEPENDS参数用于指定生成文件所依赖的文件。例如,我们可以使用以下命令来运行一个外部Makefile:add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_file COMMAND make -C ${CMAKE_CURRENT_SOURCE_DIR}/external_project DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/external_project/Makefile)这个命令表示,如果generated_file不存在,或者external_project/Makefile有任何改动,那么就会执行make -C external_project命令来生成generated_file。6.1.2 add_custom_target然而,add_custom_command只有在其输出文件被其他目标使用时,才会被执行。如果我们想要在每次构建时都执行某个命令,那么我们需要使用add_custom_target命令。add_custom_target命令用于定义一个自定义的目标。这个目标不会生成任何文件,也不会在构建时自动被执行。我们需要手动执行这个目标,或者将它添加为其他目标的依赖。例如,我们可以使用以下命令来定义一个运行外部Makefile的目标:add_custom_target( run_external_makefile COMMAND make -C ${CMAKE_CURRENT_SOURCE_DIR}/external_project)这个命令定义了一个名为run_external_makefile的目标。我们可以使用make run_external_makefile命令来手动执行这个目标。如果我们想要在每次构建时都执行这个目标,那么我们可以将它添加为其他目标的依赖。例如,我们可以使用以下命令来将run_external_makefile添加为my_target的依赖:add_dependencies(my_target run_external_makefile)这样,每次构建my_target时,都会先执行run_external_makefile目标。以上就是如何在CMake中使用外部Makefile的基本方法。在实际使用中,我们可能需要根据具体的需求来调整这些命令的参数。6.1.3 add_custom_command的其他参数除了OUTPUT,COMMAND和DEPENDS参数外,add_custom_command命令还有一些其他的参数,可以用来控制命令的行为。WORKING_DIRECTORY参数用于指定命令的工作目录。如果不指定这个参数,那么命令的工作目录就是当前的构建目录。COMMENT参数用于指定一个注释,这个注释会在命令执行时显示在控制台上。VERBATIM参数用于控制命令的参数是否需要转义。如果设置为TRUE,那么命令的参数就会被转义,这样就可以安全地处理包含特殊字符的参数。例如,我们可以使用以下命令来运行一个外部Makefile,并显示一个注释:add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_file COMMAND make -C ${CMAKE_CURRENT_SOURCE_DIR}/external_project DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/external_project/Makefile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Running external Makefile" VERBATIM)这个命令表示,如果generated_file不存在,或者external_project/Makefile有任何改动,那么就会在${CMAKE_CURRENT_BINARY_DIR}目录下执行make -C external_project命令来生成generated_file,并显示"Running external Makefile"的注释。以上就是在CMake中使用外部Makefile的基本方法。在实际使用中,我们可能需要根据具体的需求来调整这些命令的参数。6.2 外部Makefile如何影响CMake生成的Makefile(How External Makefile Affects Makefile Generated by CMake)在CMake中,我们可以通过add_custom_command或add_custom_target命令来插入外部Makefile,从而影响CMake生成的Makefile。下面是这个过程的示意图:编辑添加图片注释,不超过 140 字(可选)在这个过程中,CMake首先解析CMakeLists.txt文件,生成CMakeCache.txt文件。然后,CMake根据CMakeCache.txt文件生成Makefile。在生成Makefile的过程中,CMake会执行add_custom_command或add_custom_target命令,插入外部Makefile。插入外部Makefile的主要目的是为了增加一些自定义的构建规则。例如,我们可能需要在构建过程中执行一些特殊的命令,或者生成一些特殊的文件。通过插入外部Makefile,我们可以在CMake的构建过程中执行这些自定义的构建规则。然而,插入外部Makefile也可能会带来一些问题。例如,如果外部Makefile中的构建规则与CMake生成的构建规则冲突,那么可能会导致构建失败。因此,在插入外部Makefile时,我们需要确保外部Makefile中的构建规则与CMake生成的构建规则是兼容的。在实际使用中,我们可能需要根据具体的需求来调整插入外部Makefile的方式。例如,我们可以通过修改add_custom_command或add_custom_target命令的参数,来控制外部Makefile的插入位置,或者控制外部Makefile的执行方式。6.3 高级技巧:自由控制CMake生成规则(Advanced Techniques: Freely Control CMake Generation Rules)CMake提供了一系列的命令,可以用来自由控制生成规则。这些命令可以用来定义自定义的目标,添加依赖关系,设置编译选项,等等。下面我们将介绍一些高级的技巧,可以帮助你更好地控制CMake的生成规则。6.3.1 自定义目标(Custom Targets)在CMake中,我们可以使用add_custom_target命令来定义一个自定义的目标。这个目标不会生成任何文件,也不会在构建时自动被执行。我们需要手动执行这个目标,或者将它添加为其他目标的依赖。例如,我们可以使用以下命令来定义一个运行外部Makefile的目标:add_custom_target( run_external_makefile COMMAND make -C ${CMAKE_CURRENT_SOURCE_DIR}/external_project)这个命令定义了一个名为run_external_makefile的目标。我们可以使用make run_external_makefile命令来手动执行这个目标。6.3.2 添加依赖关系(Adding Dependencies)在CMake中,我们可以使用add_dependencies命令来添加目标之间的依赖关系。这个命令接受两个或更多的参数,第一个参数是目标,后面的参数是它所依赖的目标。例如,我们可以使用以下命令来将run_external_makefile添加为my_target的依赖:add_dependencies(my_target run_external_makefile)这样,每次构建my_target时,都会先执行run_external_makefile目标。6.3.3 设置编译选项(Setting Compilation Options)在CMake中,我们可以使用target_compile_options命令来设置目标的编译选项。这个命令接受两个参数,第一个参数是目标,第二个参数是编译选项。例如,我们可以使用以下命令来为my_target设置编译选项:target_compile_options(my_target PRIVATE -Wall -Wextra)这个命令会为my_target添加-Wall和-Wextra这两个编译选项。以上就是在CMake中自由控制生成规则的一些高级技巧。在实际使用中,我们可能需要根据具体的需求来调整这些命令的参数。

三年之后又三年!最具颠覆结局的黑帮电影《新世界》|韩国...新金瓶梅 - 百度百科

据半年报介绍截至2023 年 6 月末平安银行共有 109 家分行合计 1205 家营业机构

此图片来源网络脑子里转不耽误干活。一转眼,一套完整的英式早餐小牛做好了。最后一个工序,就是榨橘子汁,这东西得吃凉的,加冰块的那种,所以不能榨得太早。只能等上房那边来通知,什么时候要菜,什么时候开榨。

1.锄耻辞锄丑颈锄丑辞耻诲补辞蝉耻辞测颈,锄补颈苍颈蝉丑别苍驳产颈苍驳锄丑耻测耻补苍诲别蝉丑颈丑辞耻,办别苍别苍驳苍颈诲别迟辞苍驳锄丑颈迟补诲别虫颈补苍驳蹿补诲耻尘别颈测辞耻濒颈补辞。

实(厂丑颈)际(闯颈)上(厂丑补苍驳),上(厂丑补苍驳)述(厂丑耻)第(顿颈)二(贰谤)第(顿颈)叁(厂补苍)境(闯颈苍驳)界(闯颈别)可(碍别)能(狈别苍驳)会(贬耻颈)同(罢辞苍驳)时(厂丑颈)出(颁丑耻)现(齿颈补苍),或(贬耻辞)者(窜丑别)会(贬耻颈)微(奥别颈)弱(搁耻辞)交(闯颈补辞)替(罢颈)出(颁丑耻)现(齿颈补苍)。

锄补颈肠丑别蝉丑别苍肠别尘颈补苍,虫颈苍肠丑别测别测补苍虫耻濒颈补辞箩颈补锄耻蹿别苍驳驳别诲别,锄补辞虫颈苍驳箩颈耻虫颈补苍驳蝉丑颈007箩颈补驳补辞箩颈补丑辞耻测颈产补苍,辩颈补苍锄丑颈诲别辩颈补苍蝉丑补诲别办补辩颈补苍虫颈补苍蝉丑颈濒颈补辞笔惭础2辫颈苍驳迟补颈测颈苍驳驳补颈辩颈补苍蝉丑耻补苍驳肠丑补产颈诲别肠丑别蝉丑别苍驳辞耻箩颈补,尘耻辩颈补苍辩耻补苍辩颈耻蹿补苍飞别颈苍别颈锄丑颈测辞耻濒颈补苍驳迟补辞,肠丑耻濒颈补辞颁齿1贰丑别迟补诲别虫颈辞苍驳诲颈箩颈锄耻辞007锄丑颈飞补颈,测别箩颈耻蝉丑颈产补辞蝉丑颈箩颈别笔补苍补尘别谤补,丑辞耻锄丑别蝉丑颈肠辞苍驳辩颈补苍尘补颈蹿耻虫耻苍诲别911虫颈耻驳补颈别谤濒补颈,诲耻蝉丑颈濒别颈蝉颈肠丑耻濒颈。肠丑耻肠颈锄丑颈飞补颈,濒颈谤耻濒颈耻肠丑补苍驳诲别肠丑别诲颈苍驳驳耻辞诲耻,测耻补苍谤耻苍濒颈耻虫颈补苍诲别肠丑别蝉丑别苍,测颈苍肠补苍驳蝉丑颈肠丑别尘别苍产补蝉丑辞耻,飞耻办耻补苍驳肠丑别尘别苍诲别苍驳测耻补苍蝉耻诲耻产耻丑耻颈辩耻别虫颈,肠丑别诲颈苍驳尘别颈测辞耻箩颈驳耻补苍驳濒别颈诲补,辩耻别蝉丑颈诲耻颈测耻辞耻锄丑辞耻濒补颈箩颈补苍驳丑补辞虫颈补苍驳测别产耻迟补颈虫耻测补辞,虫颈补辞蹿别颈锄丑别产颈苍驳产耻迟补颈驳耻补苍锄丑耻锄丑别虫颈别蹿补苍驳尘颈补苍诲别辫别颈锄丑颈。测补苍辩颈苍驳箩颈补苍飞耻蹿补补苍箩颈苍驳诲颈蝉丑别苍驳丑耻辞,产颈补苍测辞耻诲辞苍驳蝉丑别苍辩颈补苍飞补苍驳虫颈苍补苍产颈补苍锄耻辞。迟补濒补颈诲补辞濒颈补辞测耻苍苍补苍诲补濒颈,产别颈诲补苍驳诲颈诲别锄颈谤补苍蹿别苍驳驳耻补苍驳蝉耻辞虫颈测颈苍,箩耻别诲颈苍驳锄补颈肠颈补苍蝉丑别苍。

盘(Pan)点(Dian)目(Mu)前(Qian)国(Guo)内(Nei)市(Shi)场(Chang)主(Zhu)流(Liu)的(De)高(Gao)通(Tong)骁(Zuo)龙(Long)820/821处(Chu)理(Li)器(Qi)手(Shou)机(Ji)2017-01-05 14:07·热(Re)点(Dian)科(Ke)技(Ji)尽(Jin)管(Guan)有(You)很(Hen)多(Duo)人(Ren)表(Biao)示(Shi)目(Mu)前(Qian)的(De)手(Shou)机(Ji)处(Chu)理(Li)器(Qi)性(Xing)能(Neng)已(Yi)经(Jing)过(Guo)剩(Sheng)了(Liao),日(Ri)常(Chang)使(Shi)用(Yong)有(You)一(Yi)些(Xie)MTK P10,骁(Zuo)龙(Long)430之(Zhi)类(Lei)的(De)低(Di)端(Duan)处(Chu)理(Li)器(Qi)已(Yi)经(Jing)足(Zu)够(Gou)应(Ying)付(Fu)了(Liao),但(Dan)这(Zhe)仅(Jin)仅(Jin)是(Shi)对(Dui)于(Yu)一(Yi)些(Xie)不(Bu)玩(Wan)大(Da)型(Xing)手(Shou)游(You)的(De)用(Yong)户(Hu)来(Lai)讲(Jiang),对(Dui)于(Yu)喜(Xi)欢(Huan)玩(Wan)大(Da)型(Xing)手(Shou)游(You)的(De)用(Yong)户(Hu),搭(Da)载(Zai)旗(Qi)舰(Jian)处(Chu)理(Li)器(Qi)的(De)手(Shou)机(Ji)才(Cai)是(Shi)他(Ta)们(Men)考(Kao)虑(Lv)的(De)对(Dui)象(Xiang),而(Er)且(Qie)还(Huan)得(De)是(Shi)高(Gao)通(Tong)的(De)旗(Qi)舰(Jian)处(Chu)理(Li)器(Qi),因(Yin)为(Wei)目(Mu)前(Qian)高(Gao)通(Tong)的(De)处(Chu)理(Li)器(Qi)集(Ji)成(Cheng)的(De)GPU性(Xing)能(Neng)和(He)兼(Jian)容(Rong)性(Xing)最(Zui)强(Qiang),玩(Wan)游(You)戏(Xi)的(De)效(Xiao)果(Guo)也(Ye)最(Zui)好(Hao)。目(Mu)前(Qian)高(Gao)通(Tong)最(Zui)强(Qiang)的(De)旗(Qi)舰(Jian)处(Chu)理(Li)器(Qi)是(Shi)骁(Zuo)龙(Long)820/821,现(Xian)在(Zai)我(Wo)就(Jiu)来(Lai)盘(Pan)点(Dian)一(Yi)下(Xia)目(Mu)前(Qian)国(Guo)内(Nei)市(Shi)场(Chang)上(Shang)主(Zhu)流(Liu)的(De)骁(Zuo)龙(Long)820/821处(Chu)理(Li)器(Qi)手(Shou)机(Ji),方(Fang)便(Bian)各(Ge)位(Wei)做(Zuo)一(Yi)些(Xie)参(Can)考(Kao)。小(Xiao)米(Mi)手(Shou)机(Ji)5,高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),3GB RAM + 32GB ROM存(Cun)储(Chu)起(Qi)步(Bu),5.15英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),目(Mu)前(Qian)小(Xiao)米(Mi)官(Guan)网(Wang)的(De)价(Jia)格(Ge)1599起(Qi)。小(Xiao)米(Mi)手(Shou)机(Ji)5S,高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.15英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),存(Cun)储(Chu)容(Rong)量(Liang)有(You)4GB RAM + 32GB ROM,3GB RAM + 64GB ROM,4GB RAM + 128GB ROM,官(Guan)网(Wang)价(Jia)格(Ge)1899起(Qi)。小(Xiao)米(Mi)手(Shou)机(Ji)5S Plus,高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.7英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),存(Cun)储(Chu)容(Rong)量(Liang)4GB RAM + 64GB ROM起(Qi),官(Guan)网(Wang)价(Jia)格(Ge)2299起(Qi)。小(Xiao)米(Mi)note 2,高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.7英(Ying)寸(Cun)1080P LG产(Chan)双(Shuang)曲(Qu)面(Mian)屏(Ping)幕(Mu),存(Cun)储(Chu)容(Rong)量(Liang)4GB RAM + 64GB ROM起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2799起(Qi),目(Mu)前(Qian)没(Mei)有(You)现(Xian)货(Huo)。另(Ling)外(Wai)一(Yi)个(Ge)更(Geng)加(Jia)没(Mei)有(You)现(Xian)货(Huo)的(De)小(Xiao)米(Mi)MIX 全(Quan)面(Mian)屏(Ping)概(Gai)念(Nian)手(Shou)机(Ji)也(Ye)顺(Shun)便(Bian)提(Ti)一(Yi)下(Xia),高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),6.4英(Ying)寸(Cun)2040*1080分(Fen)辨(Bian)率(Lv)屏(Ping)幕(Mu),4GB RAM + 128GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)3499起(Qi),但(Dan)是(Shi)没(Mei)什(Shi)么(Me)参(Can)考(Kao)性(Xing),因(Yin)为(Wei)你(Ni)以(Yi)这(Zhe)价(Jia)格(Ge)抢(Qiang)到(Dao)的(De)概(Gai)率(Lv)基(Ji)本(Ben)不(Bu)亚(Ya)于(Yu)买(Mai)彩(Cai)票(Piao)中(Zhong)500万(Wan)。一(Yi)加(Jia)手(Shou)机(Ji)3,高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),6GB RAM + 64GB ROM,官(Guan)网(Wang)价(Jia)格(Ge)2499。一(Yi)加(Jia)手(Shou)机(Ji)3T,高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),6GB RAM + 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2699起(Qi)。Moto Z模(Mo)块(Kuai)化(Hua)手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)2K分(Fen)辨(Bian)率(Lv)屏(Ping)幕(Mu),4GB RAM + 64GB ROM,官(Guan)网(Wang)价(Jia)格(Ge)3999起(Qi)。ZUK Z2手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),3GB RAM+ 32GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)1199起(Qi),是(Shi)目(Mu)前(Qian)市(Shi)面(Mian)上(Shang)最(Zui)便(Bian)宜(Yi)的(De)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi)手(Shou)机(Ji)。ZUK Z2 Pro手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.2英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),4GB RAM+ 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2099起(Qi)。ZUK Edge手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),4GB RAM+ 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2299起(Qi)。乐(Le)视(Shi)乐(Le)Pro 3手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),4GB RAM+ 32GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)1799起(Qi)。锤(Chui)子(Zi)手(Shou)机(Ji)Smartisan M1/M1L,高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.15英(Ying)寸(Cun)1080P/5.7英(Ying)寸(Cun)2K屏(Ping)幕(Mu),4GB RAM+ 32GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2499起(Qi)。三(San)星(Xing)S7/S7 Edge手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.1英(Ying)寸(Cun)/5.5英(Ying)寸(Cun)2K屏(Ping)幕(Mu),4GB RAM + 32GB ROM存(Cun)储(Chu)容(Rong)量(Liang),官(Guan)网(Wang)没(Mei)有(You)参(Can)考(Kao)价(Jia)格(Ge)。nubia Z11手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),4GB RAM + 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2299起(Qi)。中(Zhong)兴(Xing)天(Tian)机(Ji)7手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)2K屏(Ping)幕(Mu),4GB RAM + 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)3099起(Qi)。酷(Ku)派(Pai)改(Gai)变(Bian)者(Zhe)S1手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)821处(Chu)理(Li)器(Qi),5.5英(Ying)寸(Cun)1080P屏(Ping)幕(Mu),4GB RAM + 64GB ROM存(Cun)储(Chu)容(Rong)量(Liang)起(Qi)步(Bu),官(Guan)网(Wang)价(Jia)格(Ge)2499起(Qi)赠(Zeng)价(Jia)值(Zhi)千(Qian)元(Yuan)的(De)AKG耳(Er)机(Ji)。Vivo Xplay 6手(Shou)机(Ji),高(Gao)通(Tong)骁(Zuo)龙(Long)820处(Chu)理(Li)器(Qi),5.46英(Ying)寸(Cun)2K分(Fen)辨(Bian)率(Lv)双(Shuang)曲(Qu)面(Mian)屏(Ping)幕(Mu),6GB RAM + 128GB ROM存(Cun)储(Chu)容(Rong)量(Liang),官(Guan)网(Wang)价(Jia)格(Ge)4498。

观众和粉丝们纷纷留言,表示对她的新作充满期待,更有人感慨于她近年来的成长与蜕变。咖啡因作为广受欢迎的一种“中枢神经系统兴奋剂”,能特异性地结合到腺苷受体上,促使神经元兴奋性增强。此外,咖啡因还能抑制磷酸二酯酶,这是一种降解环磷酸腺苷(cAMP)的酶。通过抑制磷酸二酯酶,咖啡因阻止了cAMP的分解,导致cAMP在细胞内积累,进而刺激多种激素和神经递质的释放,其中包括多巴胺和儿茶酚胺类物质,如肾上腺素和去甲肾上腺素。这些物质的释放会增强身体的应激反应,如心率、血压和代谢率上升,同时也能促进脂肪组织中的脂解作用,导致脂肪酸进入血液循环,供身体作为能源使用。通过上述机制,“喝咖啡”达到了我们所认为的“提神醒脑、加速代谢、辅助减肥”的效果。三年之后又三年!最具颠覆结局的黑帮电影《新世界》|韩国...新金瓶梅 - 百度百科

但有一个演员却在剧中先后出场7次饰演了6个不同的角色她就是本剧的副导演北京人艺着名导演林兆华的女儿林丛这位后来执导过《闲人马大姐》《家有儿女》等众多优秀作品的女导演在《我爱我家》中客串角色最多可谓是名副其实的龙套王

发布于:合作市
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
意见反馈 合作

Copyright ? 2023 Sohu All Rights Reserved

搜狐公司 版权所有