2013-07-31 70 views
0

我创建具有这样的构造函数C++类:如何嵌入路径的资源文件/ CMake的(在Linux上)

MyClass(const std::string& config_file); 

即在实例化对象时应该将配置文件传递给构造函数。作为该项目的一部分,我创建这很可能会的情况下〜90%可以使用默认的配置文件,我希望人们能够用我的类如:

MyClass myInstance(DEFAULT_CONFIG_FILE); 

即我想要的符号“ DEFAULT_CONFIG_FILE'指向我作为项目一部分创建的配置文件的路径。但问题是,我不知道人们实际安装库的位置。这里有(CMake ??)技巧/最佳实践吗?

我想可以做类似

set(DEFAULT_CONFIG_FILE ${CMAKE_INSTALL_PREFIX}/share/app/default_config.json) 

但接下来的事情就不会生成目录中的工作?

乔金 -

+0

如果我理解正确的话,你想在编译时定义'DEFAULT_CONFIG_FILE'的价值? – heuristicus

+0

我认为这基本上是一个定义(因为它可以通过使东西=值传递) – urzeit

+0

@ heuristicus:理想情况下在安装时,但我不想在安装时进行完整的重新编译? – user422005

回答

0

你已经显示set命令后,你可以在你的CMakeLists.txt加上这样一行:

add_definitions(-DDEFAULT_CONFIG_FILE=${DEFAULT_CONFIG_FILE}) 

add_definitions(-D`DEFAULT_CONFIG_FILE=${DEFAULT_CONFIG_FILE}`) 

(你应该尝试什么发生如果你的路径包含空格,只是为了一般)

这应该给你在编译时使用DEFAULT_CONFIG_FILE。

一些有用的链接:
add_definition documentation
CMake: when to use add_definitions instead of set_target_properties(target PROPERTIES COMPILE_DEFINITIONS definitions)
spacing in -D option in cmake