CmakeList.txt
变量
在CMake中,CMakeLists.txt文件通常用于定义项目的构建规则和设置。这个文件中可以声明和使用各种变量来管理项目的编译和构建过程。以下是一些常见的CMakeList文件中可能会使用的变量:
CMAKE_SOURCE_DIR:指向源代码根目录的路径。CMAKE_BINARY_DIR:指向构建目录的路径。CMAKE_CURRENT_SOURCE_DIR:指向当前处理的CMakeLists.txt所在的目录。CMAKE_CURRENT_BINARY_DIR:指向与当前处理的CMakeLists.txt对应的构建目录。CMAKE_CURRENT_LIST_FILE:当前处理的CMakeLists.txt的完整路径。CMAKE_CURRENT_LIST_DIR:当前处理的CMakeLists.txt所在的目录的完整路径。PROJECT_NAME:用于设置项目的名称。PROJECT_SOURCE_DIR:指向项目源代码根目录的路径。
这些变量是CMake内置的,可以在CMakeLists.txt文件中直接引用,例如:
cmake
message("Source directory: ${CMAKE_SOURCE_DIR}")
message("Build directory: ${CMAKE_BINARY_DIR}")
message("Current source directory: ${CMAKE_CURRENT_SOURCE_DIR}")
message("Current build directory: ${CMAKE_CURRENT_BINARY_DIR}")
message("Current list file: ${CMAKE_CURRENT_LIST_FILE}")
message("Current list directory: ${CMAKE_CURRENT_LIST_DIR}")
message("Project name: ${PROJECT_NAME}")
message("Project source directory: ${PROJECT_SOURCE_DIR}")这些变量可以用于打印路径、设置目录、配置输出等等。请注意,这只是一些常见的变量,并不是所有可能用到的变量。实际上,您可以在CMakeLists.txt文件中定义自己的变量来满足特定需求。
常用宏
project这个宏用于设置项目的名称和版本。它可以接收两个参数,第一个参数是项目的名称,第二个参数是项目的版本号。add_executable这个宏用于将源代码文件编译成可执行文件。它接收两个参数,第一个参数是生成的可执行文件的名称,第二个参数是源代码文件的路径。add_library这个宏用于将源代码文件编译成静态库或共享库。它接收两个参数,第一个参数是生成的库文件的名称,第二个参数是源代码文件的路径。target_link_libraries这个宏用于将库文件链接到可执行文件中。它接收两个参数,第一个参数是可执行文件的名称,第二个参数是需要链接的库文件的名称。include_directories这个宏用于添加头文件搜索路径。它接收一个参数,参数是头文件搜索路径的路径。find_package这个宏用于查找指定的外部库。它接收一个参数,参数是要查找的外部库的名称。set这个宏用于设置变量的值。它接收两个参数,第一个参数是变量的名称,第二个参数是变量的值。add_definitions这个宏用于添加编译选项。它接收一个参数,参数是要添加的编译选项。if指令:这个指令用于基于条件执行一系列命令。可以使用if命令根据不同的情况设置编译选项或条件编译的开关。foreach指令:这个指令用于遍历一个列表,并执行相应的命令。add_executable或add_library指令:这些指令用于添加可执行文件或库文件到项目中。target_include_directories指令:这个指令用于指定编译目标的头文件搜索路径。cmake_minimum_required指令:这个指令用于指定所需的CMake的版本。
示例
cmake
cmake_minimum_required(VERSION 3.5)
project(loginPage LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.
#if(ANDROID)
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
# if (ANDROID_ABI STREQUAL "armeabi-v7a")
# set(ANDROID_EXTRA_LIBS
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
# endif()
#endif()
find_package(Qt5 COMPONENTS Widgets REQUIRED)
if(ANDROID)
add_library(loginPage SHARED
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
else()
add_executable(loginPage
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
endif()
target_link_libraries(loginPage PRIVATE Qt5::Widgets)导入静态库
导入时候有.a文件和.h文件
您好!有关cmake导入静态库的问题,以下是详细的回答:
- 首先,在CMakeLists.txt文件中,添加以下几行代码:
cmake
# 设置项目名称
project(YourProjectName)
# 设置编译器
set(CMAKE_CXX_STANDARD 11)
# 添加可执行文件
add_executable(YourExecutable your_source_files.cpp)
# 添加库文件搜索路径 .a文件
link_directories(${CMAKE_SOURCE_DIR}/libs)
# 添加头文件搜索路径 .h文件
include_directories(${CMAKE_SOURCE_DIR}/libs/include)
# 添加需要链接的静态库
target_link_libraries(YourExecutable YourLibraryName)确保您的.a文件和.h文件位于正确的目录中。一般来说,您可以将.a文件放入一个名为lib的文件夹中,将.h文件放入一个名为include的文件夹中。
修改上述代码中的"YourProjectName"为您的项目名称,"YourExecutable"为您的可执行文件名称,"your_source_files.cpp"为您的源代码文件名,"YourLibraryName"为您要链接的静态库名称。
确保您的CMakeLists.txt文件和源代码文件位于同一目录下。
打开终端,进入您的项目目录,执行以下命令编译项目:
shell
mkdir build
cd build
cmake ..
make- 如果一切顺利,编译过程应该成功,并生成可执行文件。您可以在build文件夹中找到生成的可执行文件。