我的~/.bashrc文件中有一个常量的~/.bashrc:
export MYPROJECT = /home/loom/my_project我可以看到在终端中定义了常量:
loom@loom$ ls -ld $MYPROJECT
drwxr-xr-x 25 loom loom 4096 Jul 21 22:12 /home/loom/my_project我尝试在我的CMakeLists.txt中使用常量
add_executable(booo src/main.cpp ${MYPROJECT}/foo/trunk/bar/File.h)但是,它会产生一个错误:
CMake Error at CMakeLists.txt:17 (add_executable):
Cannot find source file:
/foo/trunk/bar/File.h
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake Error: CMake can not determine linker language for target: booo
CMake Error: Cannot determine link language for target "booo".如果我在没有$MYPROJECT的情况下使用了显式路径,则它将被处理而没有错误。
add_executable(booo src/main.cpp /home/loom/my_project/foo/trunk/bar/File.h)如何在cmake中使用.bashrc中定义的路径?
发布于 2015-11-17 14:08:31
而不是
add_executable(booo src/main.cpp ${MYPROJECT}/foo/trunk/bar/File.h)使用
add_executable(booo src/main.cpp $ENV{MYPROJECT}/foo/trunk/bar/File.h)CMake文档声明:
使用语法$ENV{ VAR }读取环境变量VAR。还请参见set()命令来设置ENV{VAR}。
发布于 2015-11-18 21:22:40
把我的评论变成回答
在CMake中有很多方法可以做到这一点。由于在CMake项目中直接使用环境变量的不良经验(它们不仅必须在第一次调用CMake配置/生成期间有效,而且在所有连续构建期间也必须有效),我建议将常量转换为缓存的CMake变量。
我在我的项目中使用了以下方法之一:
MYPROJECT CMake的-D option注射。
-DMYPROJECT:PATH=$MYPROJECT ..。
然后,CMake会将这个值缓存在它自己的MYPROJECT内部变量中。find_path(),这也将缓存其结果:
find_path( MYPROJECT_INCLUDE_DIR名称文件h路径ENV /home/织机/my_ PATH_SUFFIXES foo/PATH_SUFFIXES/bar)foo.a这样的库-遵循CMake的一个样本查找模块并通过以下方式扩展find_path()代码:
find_library( MYPROJECT_LIBRARY NAMES foo PATHS PATH_SUFFIXES foo/lib ) if(MYPROJECT_INCLUDE_DIR和MYPROJECT_LIBRARY而不是目标MyProject:: MYPROJECT ) add_library(MyProject::MyProject未知导入) set_target_properties( MyProject::MYPROJECT_LIBRARY IMPORTED_LOCATION "${MYPROJECT_LIBRARY}“INTERFACE_INCLUDE_DIRECTORIES )${MYPROJECT_INCLUDE_DIR}) endif()
现在,您可以将其直接用作任何其他CMake目标。
add_executable(booo /main.cpp) target_link_libraries(booo::MyProject)更多参考资料
https://stackoverflow.com/questions/33758798
复制相似问题