我试图找到解决方案:如何检查构建目标?
考虑以下CMake脚本:
cmake_minimum_required(VERSION 3.5.1)
project(cppTests)
# How to check at this point the target of build
if(TARGET "cppTests")
message(STATUS "Target is cppTests")
else()
message(STATUS "Target is not cppTests")
endif()
message(STATUS "Target is ${TARGET}")
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(cppTests ${SOURCE_FILES})
然后我打电话给以下人员:
/home/username/Software/clion-2017.1.1/bin/cmake/bin/cmake --build /home/username/Projects/cppTests/cmake-build-debug --target cppTests -- -j 8
如何在 - 目标选项后检查 CMake 脚本中的目标 cppTests ? 我在 Makefiles 中寻找类似 MAKECMDGOALS 的内容。 我找到了任何有用的解决方案......
答案 0 :(得分:2)
开发人员在 CMake生成项目文件后选择构建的目标。当CMake运行时,CMake无法知道开发人员将构建什么目标。因此,你所要求的对于CMake项目来说并没有多大意义。在Makefile中,没有单独的配置步骤,它是构建的一部分,它是如何提供像MAKECMDGOALS这样的功能。如果你真的想要Makefiles的这个功能,也可能值得重新考虑,因为isn't meant for typical use(强调我的):
Make会将特殊变量MAKECMDGOALS设置为您在命令行中指定的目标列表。如果在命令行上没有给出目标,则此变量为空。 请注意,此变量仅应在特殊情况下使用。
在您的示例中,您也在滥用if(TARGET...)
。该构造用于测试项目是否已经定义一个特定的CMake目标(在您的示例中,它直到if()
命令之后才会定义,因此它总是会计算为false )。有关详细信息,请参阅文档here。
答案 1 :(得分:2)
你所提出的问题在CMake世界中毫无意义。 CMake项目的时间表包括3个不同的步骤:
configure time > generate time > build time
\---------------v--------------/ \---v----/
CMake is running make is running
在 configure 步骤中,CMake读取并解析CMakeLists.txt
个文件,并将处理后的数据存储在内存中。当您按下CMake GUI中的Configure
按钮时会发生这种情况。
在生成步骤中,CMake对内存中的数据进行操作以生成构建系统文件(Makefile,Visual Studio解决方案和项目等)。当您按下CMake GUI中的Generate
按钮时会发生这种情况。
从命令行运行cmake
会立即配置生成。
然后使用构建系统完成CMake并终止其运行。您现在拥有一个可以由构建工具处理的工作构建系统(例如make
或msbuild
)。即使您使用cmake --build
运行此构建工具,这个cmake
的新调用也根本不会读取您的CMakeLists.txt
文件。它只是从生成的CMakeCache.txt
访问最小值,以确定要运行的构建工具,然后运行它。
您没有说明您尝试使用这些信息实现的目标,但也许您可以处理add_custom_command(TARGET cppTests PRE_LINK)
之类的内容?
答案 2 :(得分:0)
我不是100%确定我理解你的问题,但根据我的理解,你正在寻找变量Error
和NSError
。
CMAKE_PROJECT_NAME
查看常见变量列表here。当我做CMake时,我经常保持这个链接打开;我想你会发现它也很有用。
答案 3 :(得分:0)
我找到了一个解决方案:
add_custom_command(
OUTPUT fidl_files_generated
DEPENDS "./interfaces/*.fidl"
COMMAND touch fidl_files_generated
COMMAND /home/redra/Projects/Automotive/cgen/commonapi-generator/commonapi-generator-linux-x86_64 -sk ../interfaces/ *.fidl
COMMAND /home/redra/Projects/Automotive/cgen/commonapi_dbus_generator/commonapi-dbus-generator-linux-x86_64 ../interfaces/ *.fidl
)
add_custom_target(fidl_gen
DEPENDS fidl_files_generated)
set(GENERATED_FILES "../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusProxy.cpp"
"../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp"
"../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusStubAdapter.cpp"
"../cmake-build-debug/src-gen/v1/commonapi/HelloWorldStubDefault.cpp"
"../cmake-build-debug/src-gen/v1/commonapi/HelloWorldDBusDeployment.cpp")
set_source_files_properties(${GENERATED_FILES} PROPERTIES GENERATED TRUE)
add_executable(
CommonAPI_Server
${SOURCE_FILES}
${GENERATED_FILES})
add_dependencies(CommonAPI_Server fidl_gen)
感谢大家的支持!!
特别感谢Angew寻求支持和帮助!!!!