cmake编译常见命令
1、PROJECT_SOURCE_DIR/CMAKE_SOURCE_DIR/_SOURCE_DIR:为包含PROJECT()命令的最近一个CMakeLists.txt文件所在的文件夹路径。 2、PROJECT_BINARY_DIR 运行cmake命令的目录,即工程编译发生的路径 例如: PROJECT_SOURCE_DIR:/opt/c++/ctest/test PROJECT_BINARY_DIR:/opt/c++/ctest/test/build 3、PROJECT_NAME:本CMakeLists.txt的project名称 例:project(TTU) 4、add_subdirectory(子文件夹名称): 编译子文件夹中的CMakeLists.txt,子文件夹中必须有CMakeList.txt 例:add_subdirectory(commiec)
add_subdirectory(src bin)将src子目录加入工程,并指定编译输出(包含编译中间结果)路径为bin目录
5、EXECUTABLE_OUTPUT_PATH: 指定最终的可执行文件的位置 例:SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 6、SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 设置库文件的输出目录 例:SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 5/6两变量在新版本中已被`CMAKE_RUNTIME_OUTPUT_DIRECTORY`和`CMAKE_ARCHIVE_OUTPUT_DIRECTORY`代替
project(xxx)
set(CMAKE_C_FLAGS "-std=gnu99") set(CMAKE_CXX_FLAGS "-std=c++11") #必须 # include_directories(路径),规定.h头文件路径 include_directories(../libpub/rapidxml) # 给文件名/路径名或其他字符串起别名,用${变量}获取变量内容 SET(SRC_LIST test01aaa.cpp ) # add_subdirectory(子文件夹名称) #父目录必须,子目录不必 add_subdirectory(commi)
# 将.cpp/.c/.cc文件生成.a静态库 # 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可 add_library(库文件名称 STATIC 文件) #通常子目录(二选一) # add_executable(可执行文件名称 文件),将.cpp/.c/.cc文件生成可执行文件 #通常父目录(二选一) add_executable(104 ${SRC_LIST}) #EXECUTABLE_OUTPUT_PATH: 指定最终的可执行文件的位置 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/) #LIBRARY_OUTPUT_PATH变量用来指定最终的目标二进制的位置
SET(EXECUTABLE_OUTPUT_PATH $(PROJECT_BINARY_DIR}/bin) #指定二进制文件安装路径
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) #指定共享库文件安装路径
lib库:
ADD_LIBRARY(hello SHARED ${BIBHELLO_SRC})
hello:是正常的库名,生成的名字前会加上lib,最终产生的文件是libhello.so。
SHARED,动态库
STATIC,静态库
${LIBHELLO_SRC):源文件
link_directories(路径) #必须 # 对add_library或add_executable生成的文件进行链接操作 # 注意,库文件名称通常为libxxx.so,在这里只要写xxx即可 # target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称) #必须 TARGET_LINK_LIBRARIES(IEC104 mqttpub jsoncpp paramshm dblite pub)