设置编译输出路径 在CMakeList.txt中如下设置后,无论是编译可执行文件还是编译静态库,都会输出到指定目录下,而不再是默认的当前目录。 # etc. etc. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib/") 参考自:https://stackoverflow.com/questions/38445335/cmake-library-output-directory-not-affected-by-cmake-library-output-director/38450844 获取指定目录下的所有源文件 file(GLOB cpp_files ./src/*.cpp) add_library(mylib STATIC ${cpp_files}) 打印log if (NOT CMAKE_VERSION VERSION_GREATER "3.0") message(FATAL_ERROR "cmake version 3.x is required!") endif() 修改默认的CMAKE_MODULE_PATH目录 CMAKE_MODULE_PATH是供find_package搜索第三方库用的。cmake的默认Modules目录在安装目录中:cmake-3.11.3-win64-x64\share\cmake-3.11\Modules。 如果要追加Modules目录,有3种方式: set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_PATH}:${CMAKE_MODULE_PATH}") LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_PREFIX}") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package用法 通常情况下,包含第三方库需要写以下内容 include_directories("${project_root_path}/include/") link_directories(./lib) add_executable(myapp myapp.cpp) target_link_libraries(myapp mylib) 如果引用的很多个第三方库,那么类似上面的内容会写很多,且如果自己的多个项目都引用了某个第三方库,那么我每个项目的CmakeList.txt都得写一遍,重复劳动很多。那么有没办法为每个第三方库只定义一次它的头文件和库文件信息,然后在自己的工程中只指定名称即可?(类似编译Java的Maven仓库)答案是当然可以,find_package帮你解决。 find_package定义在自己工程的CmakeList.txt中: find_package( XXX CONFIG REQUIRED ) 然后cmake就会在默认的Modules(即CMAKE_MODULE_PATH指定的目录)目录中搜索这个XXX第三方库。 搜索有两种模式:FindXXX.cmake和XXXConfig.cmake。前者叫做Module模式,后者叫做Config模式。 Module模式 搜索CMAKE_MODULE_PATH指定路径下的FindXXX.cmake文件,通过该文件从而找到XXX库的头文件和lib文件位置。FindXXX.cmake中需要定义XXX_INCLUDE_DIRS和XXX_LIBRARIES。 Config模式 搜索XXX_DIR指定路径下的XXXConfig.cmake文件(XXX_DIR定义在自己工程的CMakeList.txt或者cmake-gui的环境变量中),通过该文件从而找到XXX库的头文件和lib文件位置。XXXConfig.cmake中需要定义XXX_INCLUDE_DIRS和XXX_LIBRARIES Config模式示例:

Continue reading

原文:http://10305101ivy.blog.163.com/blog/static/584765892012227322607 最近编译工程用到了windows下nmake工具,遇到了很多的问题,在网上苦寻答案,终于得到解决。现在把遇到的问题及解决办法写下来,希望给大家一些帮助。 1.NMAKE:fatal error U1077.“cl.exe” return code 0xc0000135 产生原因:在安装visual studio的时候没有勾选注册环境变量导致的。 解决办法:在系统环境变量中加入visual studio的安装路径:vs安装路径\VC\Bin,以及vs安装路径\Common7\IDE 2.NMAKE:fatal error U1077. return code 0x2 产生原因:找不到代码文件中包含的头文件 解决办法:cmd下进入到vs安装路径\VC\Bin下,执行vcvars32,此时会执行vcvas32.bat自动为vs设置环境变量 3.NMAKE:fatal error U1077. return code 0x460 产生原因:你的工程中连接了一个lib文件,链接的时候却出现不能解析的外部符号。可能问题是你包含的lib是错的,或者有不兼容问题。我的问题就是后者,我的系统的32位的,但是链接了一个64位的lib. 解决办法:链接正确的lib 乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。----北宋·苏轼《念奴娇·赤壁怀古》

Continue reading

[Build]cmake-gui使用

要使用cmake-gui,请确保已经写好了CMakeLists.txt。 打开cmake-gui后,指定source目录和生成的bin目录。 再点击Configure,指定VS版本。然后就可以生成VS工程sln等文件了。 如果生成过程中有相关依赖库没有指定正确,输出窗口会给出提示,比如示例中有个glm库的没有指定,此时我们再重新指定下依赖库的位置。 配置后再点击Generate,直到没有错误信息提示。 CMAKE相关的配置说明 CMAKE_CONFIGURATION_TYPES 表示VS上的Solution Configurations(Debug/Release等)选项 CMAKE_INSTALL_PREFIX 表示编译后存放的目录,以方便FIND_XXX()方式来查找。 删除临时文件 如果要删除cache文件,点击:File -》 Delete Cache。 树德莫如滋,去疾莫如尽。----《左传》

Continue reading

Author's picture

Neil Wang

久长唯有品格

To Be Marvelous

Yichang·Hubei